diff --git a/.vs/CitySense/v15/.suo b/.vs/CitySense/v15/.suo new file mode 100644 index 00000000..60b77231 Binary files /dev/null and b/.vs/CitySense/v15/.suo differ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 00000000..f8b48885 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 00000000..6cc57ea9 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,13 @@ +{ + "ExpandedNodes": [ + "", + "\\static", + "\\static\\css", + "\\static\\js", + "\\templates", + "\\templates\\layouts", + "\\templates\\pages" + ], + "SelectedNode": "\\static\\css\\main.css", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 00000000..9fd729db Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/DummyFile.txt b/DummyFile.txt new file mode 100644 index 00000000..598ba9ae --- /dev/null +++ b/DummyFile.txt @@ -0,0 +1 @@ +This is a dumb file \ No newline at end of file diff --git a/README.md b/README.md index a30c837e..9ada88ba 100644 --- a/README.md +++ b/README.md @@ -1,283 +1 @@ -[](https://opensource.org/licenses/Apache-2.0) - -## Welcome - -Hello. Want to get started with Flask quickly? Good. You came to the right place. This Flask application framework is pre-configured with **Flask-SQLAlchemy**, **Flask-WTF**, **Fabric**, **Coverage**, and the **Bootstrap** frontend (among others). This will get your Flask app up and running on Heroku or PythonAnywhere quickly. Use this starter, boilerplate for all you new Flask projects. Cheers! - -<hr> - - - -**Designed for the [Real Python](http://www.realpython.com) course.** - -<hr> - -Preview the skeleton app here - [http://www.flaskboilerplate.com/](http://www.flaskboilerplate.com/) - -**EXAMPLE APP: [http://flasktaskr.herokuapp.com/](http://flasktaskr.herokuapp.com/)** - -**What is Flask?** Flask is a microframework for Python based on Werkzeug and Jinja2. - -Project Structure --------- - - ```sh - ├── Procfile - ├── Procfile.dev - ├── README.md - ├── app.py - ├── config.py - ├── error.log - ├── forms.py - ├── models.py - ├── requirements.txt - ├── static - │ ├── css - │ │ ├── bootstrap-3.0.0.min.css - │ │ ├── bootstrap-theme-3.0.0.css - │ │ ├── bootstrap-theme-3.0.0.min.css - │ │ ├── font-awesome-3.2.1.min.css - │ │ ├── layout.forms.css - │ │ ├── layout.main.css - │ │ ├── main.css - │ │ ├── main.quickfix.css - │ │ └── main.responsive.css - │ ├── font - │ │ ├── FontAwesome.otf - │ │ ├── fontawesome-webfont.eot - │ │ ├── fontawesome-webfont.svg - │ │ ├── fontawesome-webfont.ttf - │ │ └── fontawesome-webfont.woff - │ ├── ico - │ │ ├── apple-touch-icon-114-precomposed.png - │ │ ├── apple-touch-icon-144-precomposed.png - │ │ ├── apple-touch-icon-57-precomposed.png - │ │ ├── apple-touch-icon-72-precomposed.png - │ │ └── favicon.png - │ ├── img - │ └── js - │ ├── libs - │ │ ├── bootstrap-3.0.0.min.js - │ │ ├── jquery-1.10.2.min.js - │ │ ├── modernizr-2.6.2.min.js - │ │ └── respond-1.3.0.min.js - │ ├── plugins.js - │ └── script.js - └── templates - ├── errors - │ ├── 404.html - │ └── 500.html - ├── forms - │ ├── forgot.html - │ ├── login.html - │ └── register.html - ├── layouts - │ ├── form.html - │ └── main.html - └── pages - ├── placeholder.about.html - └── placeholder.home.html - ``` - -### Screenshots - - - - - - -### Quick Start - -1. Clone the repo - ``` - $ git clone https://github.com/realpython/flask-boilerplate.git - $ cd flask-boilerplate - ``` - -2. Initialize and activate a virtualenv: - ``` - $ virtualenv --no-site-packages env - $ source env/bin/activate - ``` - -3. Install the dependencies: - ``` - $ pip install -r requirements.txt - ``` - -5. Run the development server: - ``` - $ python app.py - ``` - -6. Navigate to [http://localhost:5000](http://localhost:5000) - - -Deploying to Heroku ------- - -1. Signup for [Heroku](https://api.heroku.com/signup) -2. Login to Heroku and download the [Heroku Toolbelt](https://toolbelt.heroku.com/) -3. Once installed, open your command-line and run the following command - `heroku login`. Then follow the prompts: - - ``` - Enter your Heroku credentials. - Email: michael@mherman.org - Password (typing will be hidden): - Could not find an existing public key. - Would you like to generate one? [Yn] - Generating new SSH public key. - Uploading ssh public key /Users/michaelherman/.ssh/id_rsa.pub - ``` - -4. Activate your virtualenv -5. Heroku recognizes the dependencies needed through a *requirements.txt* file. Create one using the following command: `pip freeze > requirements.txt`. Now, this will only create the dependencies from the libraries you installed using pip. If you used easy_install, you will need to add them directly to the file. -6. Create a Procfile. Open up a text editor and save the following text in it: - - ``` - web: gunicorn app:app --log-file=- - ``` - - Then save the file in your applications root or main directory as *Procfile* (no extension). The word "web" indicates to Heroku that the application will be attached to the HTTP routing stack once deployed. - -7. Create a local Git repository (if necessary): - - ``` - $ git init - $ git add . - $ git commit -m "initial files" - ``` - -8. Create your app on Heroku: - - ``` - $ heroku create <name_it_if_you_want> - ``` - -9. Deploy your code to Heroku: - - ``` - $ git push heroku master - ``` - -10. View the app in your browser: - - ``` - $ heroku open - ``` - -11. You app should look similar to this - [http://www.flaskboilerplate.com/](http://www.flaskboilerplate.com/) - -12. Having problems? Look at the Heroku error log: - - ``` - $ heroku logs - ``` - -### Deploying to PythonAnywhere - -1. Install [Git](http://git-scm.com/downloads) and [Python](http://install.python-guide.org/) - if you don't already have them, of course. - - > If you plan on working exclusively within PythonAnywhere, which you can, because it provides a cloud solution for hosting and developing your application, you can skip step one entirely. :) - -2. Sign up for [PythonAnywhere](https://www.pythonanywhere.com/pricing/), if you haven't already -3. Once logged in, you should be on the Consoles tab. -4. Clone this repo: - ``` - $ git clone git://github.com/realpython/flask-boilerplate.git - $ cd flask-boilerplate - ``` - -5. Create and activate a virtualenv: - ``` - $ virtualenv venv --no-site-packages - $ source venv/bin/activate - ``` - -6. Install requirements: - ``` - $ pip install -r requirements.txt - ``` - -7. Next, back on PythonAnywhere, click Web tab. -8. Click the "Add a new web app" link on the left; by default this will create an app at your-username.pythonanywhere.com, though if you've signed up for a paid "Web Developer" account you can also specify your own domain name here. Once you've decided on the location of the app, click the "Next" button. -9. On the next page, click the "Flask" option, and on the next page just keep the default settings and click "Next" again. -Once the web app has been created (it'll take 20 seconds or so), you'll see a link near the top of the page, under the "Reload web app" button, saying "It is configured via a WSGI file stored at..." and a filename. Click this, and you get to a page with a text editor. -10. Put the following lines of code at the start of the WSGI file (changing "your-username" appropriately) - - ``` - activate_this = '/home/your-username/flask-boilerplate/venv/bin/activate_this.py' - execfile(activate_this, dict(__file__=activate_this)) - ``` - -11. Then update the following lines of code: - - from - - ``` - project_home = u'/home/your-username/mysite' - ``` - - to - - ``` - project_home = u'/home/your-username/flask-boilerplate' - ``` - - from - - ``` - from flask_app import app as application - ``` - - to - - ``` - from app import app as application - ``` - -12. Save the file. -13. Go to the website http://your-username.pythonanywhere.com/ (or your own domain if you specified a different one earlier), and you should see something like this - [http://www.flaskboilerplate.com/](http://www.flaskboilerplate.com/). - -*Now you're ready to start developing!* - -***Need to PUSH your PythonAnywhere repo to Github?*** - -1. Start a bash console -2. Run: - - ``` - $ ssh-keygen -t rsa - ``` - -3. Just accept the defaults, then show the public key: - - ``` - $ cat ~/.ssh/id_rsa.pub - ``` - -4. Log in to GitHub. -5. Go to the "Account settings" option at the top right (currently a wrench and a screwdriver crossed) -6. Select "SSH Keys" from the list at the left. -7. Click the "Add SSH key" button at top right. -8. Enter a title (I suggest something like "From PythonAnywhere" and then paste the output of the previous "cat" command into the Key box. -9. Click the green "Add key" button. You'll be prompted to enter your password. - -PUSH and PULL away! - -### What's next? - -1. Using Heroku? Make sure you deactivate your virtualenv once you're done deploying: `deactivate` -2. Need to reactivate? (1) Unix - `source venv/bin/activate` (2) Windows - `venv\scripts\activate` -4. Add your Google Analytics ID to the *main.html* file -5. Add a domain name to [Heroku](https://devcenter.heroku.com/articles/custom-domains) or PythonAnywhere via a [CNAME](http://en.wikipedia.org/wiki/CNAME_record) record -5. DEVELOP YOUR APP - need [help](http://realpython.com)? - -### Learn More - -1. [Getting Started with Python on Heroku](https://devcenter.heroku.com/articles/python) -2. [PythonAnywhere - Help](https://www.pythonanywhere.com/help/) -1. [Flask Documentation](http://flask.pocoo.org/docs/) -2. [Flask Extensions](http://flask.pocoo.org/extensions/) -1. [Real Python](http://www.realpythonfortheweb.com) :) - +insert content here diff --git a/app.py b/app.py index 64d2796c..4010632d 100644 --- a/app.py +++ b/app.py @@ -2,13 +2,20 @@ # Imports #----------------------------------------------------------------------------# +import json + from flask import Flask, render_template, request # from flask.ext.sqlalchemy import SQLAlchemy import logging +import pandas as pd from logging import Formatter, FileHandler from forms import * import os +import random + + + #----------------------------------------------------------------------------# # App Config. #----------------------------------------------------------------------------# @@ -41,9 +48,44 @@ def wrap(*args, **kwargs): #----------------------------------------------------------------------------# +class Point: + def __init__(self, lat, lng, count): + self.lat = lat + self.lng = lng + self.count = count + + def to_dict(self): + return { + 'lat': self.lat, + 'lng': self.lng, + 'count': self.count + } + +def generateRandomPoints(numPoints): + pointList = [] + for x in range(0, numPoints): + pointObj = Point(random.randint(-100, 100), random.randint(-100, 100), random.randint(0, 50)) + pointList.append(pointObj) + return pointList + + @app.route('/') def home(): - return render_template('pages/placeholder.home.html') + df = pd.read_csv('data.csv').drop('Open', axis=1) + chart_data = df.to_dict(orient='records') + chart_data = json.dumps(chart_data, indent=2) + + + point_data = generateRandomPoints(5000) + df2 = pd.DataFrame.from_records([ point.to_dict() for point in point_data]) + point_data = df2.to_dict(orient="records") + point_data = json.dumps(point_data, indent=2) + + data = {'chart_data': chart_data, 'point_data': point_data} + + print(data) + + return render_template('pages/placeholder.home.html', data=data) @app.route('/about') diff --git a/data.csv b/data.csv new file mode 100644 index 00000000..e144f3f9 --- /dev/null +++ b/data.csv @@ -0,0 +1,62 @@ +Date,Open,High,Low,Close +2009-03-31,17.83,18.79,17.78,18.37 +2009-03-30,17.74,17.76,17.27,17.48 +2009-03-27,18.54,18.62,18.05,18.13 +2009-03-26,18.17,18.88,18.12,18.83 +2009-03-25,17.98,18.31,17.52,17.88 +2009-03-24,18.04,18.21,17.84,17.93 +2009-03-23,17.37,18.59,17.31,18.33 +2009-03-20,17.32,17.65,16.88,17.06 +2009-03-19,17.37,17.45,16.92,17.14 +2009-03-18,17.03,17.22,16.6,16.96 +2009-03-17,16.32,16.9,16.26,16.9 +2009-03-16,16.82,16.96,16.24,16.25 +2009-03-13,16.98,17.05,16.18,16.65 +2009-03-12,17.01,17.04,16.48,17.01 +2009-03-11,16.63,17.2,16.43,17.11 +2009-03-10,15.37,16.62,15.25,16.48 +2009-03-09,15.2,15.74,15.1,15.15 +2009-03-06,15.35,15.62,14.87,15.28 +2009-03-05,15.86,15.88,15.27,15.27 +2009-03-04,16.12,16.4,15.89,16.12 +2009-03-03,16.03,16.24,15.64,15.88 +2009-03-02,15.96,16.25,15.72,15.79 +2009-02-27,16.29,16.52,16.1,16.15 +2009-02-26,17.05,17.08,16.42,16.42 +2009-02-25,17.01,17.24,16.46,16.96 +2009-02-24,17.03,17.35,16.36,17.17 +2009-02-23,18.02,18.15,17.16,17.21 +2009-02-20,17.77,18.19,17.66,18 +2009-02-19,18.3,18.38,17.81,17.91 +2009-02-18,18.22,18.45,18,18.12 +2009-02-17,18.49,18.5,17.89,18.09 +2009-02-13,19.27,19.47,19.04,19.09 +2009-02-12,18.97,19.32,18.54,19.26 +2009-02-11,18.94,19.49,18.92,19.21 +2009-02-10,19.25,19.8,18.7,18.8 +2009-02-09,19.64,19.77,19.26,19.44 +2009-02-06,19.16,19.93,19.06,19.66 +2009-02-05,18.51,19.14,18.25,19.04 +2009-02-04,18.54,19,18.5,18.63 +2009-02-03,17.85,18.61,17.6,18.5 +2009-02-02,17.03,18.13,17,17.83 +2009-01-30,17.74,17.79,17.1,17.1 +2009-01-29,17.78,17.96,17.56,17.59 +2009-01-28,17.8,18.31,17.76,18.04 +2009-01-27,17.78,17.97,17.43,17.66 +2009-01-26,17.29,17.81,17.23,17.63 +2009-01-23,16.97,17.49,16.75,17.2 +2009-01-22,18.05,18.18,17.07,17.11 +2009-01-21,18.87,19.45,18.46,19.38 +2009-01-20,19.46,19.62,18.37,18.48 +2009-01-16,19.63,19.91,19.15,19.71 +2009-01-15,19.07,19.3,18.52,19.24 +2009-01-14,19.53,19.68,19.01,19.09 +2009-01-13,19.52,19.99,19.52,19.82 +2009-01-12,19.71,19.79,19.3,19.47 +2009-01-09,20.17,20.3,19.41,19.52 +2009-01-08,19.63,20.19,19.55,20.12 +2009-01-07,20.19,20.29,19.48,19.51 +2009-01-06,20.75,21,20.61,20.76 +2009-01-05,20.2,20.67,20.06,20.52 +2009-01-02,19.53,20.4,19.37,20.33 \ No newline at end of file diff --git a/mapdata.js b/mapdata.js new file mode 100644 index 00000000..0626a6ea --- /dev/null +++ b/mapdata.js @@ -0,0 +1,2 @@ +// taken from https://github.com/pa7/heatmap.js (MIT-licensed) +var data = [[38,20,2],[38,690,3],[48,30,1],[48,40,1],[48,670,1],[58,640,1],[58,680,1],[67,630,1],[86,10,1],[86,660,1],[96,0,1],[96,80,1],[96,530,1],[96,540,2],[96,560,1],[96,620,1],[96,640,1],[105,530,1],[105,560,3],[105,590,1],[105,610,1],[115,300,1],[115,310,4],[125,260,1],[125,280,1],[125,300,1],[125,500,1],[125,530,1],[134,250,1],[134,260,1],[134,280,1],[144,40,1],[144,260,1],[144,270,4],[144,320,1],[144,330,1],[153,220,1],[163,280,1],[173,120,2],[182,80,1],[182,120,2],[192,10,1],[192,120,1],[192,130,2],[192,190,1],[192,530,1],[201,120,2],[201,130,1],[201,150,1],[201,190,1],[201,240,1],[201,280,1],[201,290,1],[201,340,1],[201,390,3],[201,400,2],[201,420,1],[201,670,1],[201,710,1],[201,750,1],[211,160,2],[211,280,1],[211,320,1],[211,340,1],[211,800,2],[211,810,2],[221,80,1],[221,140,2],[221,170,1],[221,180,1],[221,230,1],[221,420,1],[221,490,2],[221,730,1],[230,150,1],[230,550,4],[230,670,1],[230,790,2],[240,100,1],[240,120,1],[240,150,1],[240,160,1],[240,220,1],[240,240,1],[240,300,1],[240,330,1],[240,460,1],[240,480,2],[240,550,1],[240,570,1],[240,840,2],[249,70,1],[249,120,1],[249,200,1],[249,210,1],[249,290,3],[249,340,1],[249,860,2],[249,870,2],[259,0,1],[259,90,1],[259,160,1],[259,180,1],[259,190,1],[259,270,1],[259,280,1],[259,290,2],[259,320,1],[259,360,1],[259,430,1],[259,480,1],[259,490,1],[259,860,1],[269,60,2],[269,150,1],[269,220,1],[269,260,1],[269,280,1],[269,290,1],[269,300,1],[269,320,1],[269,350,1],[269,450,3],[269,470,2],[269,480,3],[269,490,1],[278,120,1],[278,140,1],[278,150,2],[278,190,1],[278,220,1],[278,260,1],[278,290,2],[278,500,2],[278,680,2],[278,740,2],[288,0,1],[288,50,1],[288,150,2],[288,230,1],[288,260,1],[288,280,1],[288,290,2],[288,320,1],[288,330,1],[288,340,1],[288,460,1],[288,630,2],[288,720,2],[288,730,2],[288,750,2],[288,790,2],[288,840,1],[297,20,1],[297,120,2],[297,140,2],[297,150,1],[297,180,1],[297,250,4],[297,290,8],[297,300,4],[297,310,1],[297,340,2],[297,350,2],[297,360,1],[297,380,2],[297,410,1],[297,430,2],[297,440,5],[297,450,1],[297,460,8],[297,470,2],[297,480,4],[297,490,2],[297,500,3],[297,520,2],[297,530,1],[297,540,1],[297,550,1],[297,610,1],[297,620,2],[297,630,4],[297,640,1],[297,650,2],[297,660,3],[297,670,11],[297,690,1],[297,700,1],[297,710,2],[297,730,2],[297,770,3],[297,780,2],[297,790,2],[297,830,2],[307,0,1],[307,10,1],[307,70,1],[307,100,1],[307,120,3],[307,140,2],[307,150,2],[307,170,2],[307,180,1],[307,230,1],[307,250,1],[307,270,1],[307,290,1],[307,300,1],[307,320,1],[307,350,1],[307,680,2],[307,690,2],[307,700,2],[307,710,1],[307,730,1],[307,840,1],[307,850,2],[316,0,1],[316,140,1],[316,150,1],[316,270,1],[316,410,1],[316,420,1],[316,430,4],[316,440,1],[316,460,1],[316,490,1],[316,510,1],[316,530,2],[316,550,1],[316,690,1],[316,700,2],[316,730,1],[316,850,1],[316,880,1],[326,20,1],[326,90,1],[326,110,1],[326,130,1],[326,170,2],[326,190,1],[326,230,1],[326,260,1],[326,280,1],[326,290,1],[326,300,2],[326,310,1],[326,320,1],[326,330,1],[326,410,1],[326,460,1],[326,480,1],[326,530,1],[326,580,1],[326,680,1],[326,690,3],[326,750,2],[326,840,1],[326,870,1],[326,1010,2],[336,140,1],[336,170,1],[336,180,1],[336,190,1],[336,230,1],[336,240,1],[336,290,2],[336,310,1],[336,480,1],[336,510,1],[336,690,1],[336,730,1],[336,750,3],[336,810,1],[336,870,3],[336,880,1],[336,960,1],[336,990,1],[336,1000,1],[345,0,1],[345,150,3],[345,160,1],[345,190,2],[345,240,1],[345,260,1],[345,290,4],[345,400,1],[345,420,1],[345,440,1],[345,460,1],[345,500,1],[345,510,1],[345,530,1],[345,630,1],[345,650,1],[345,690,1],[345,710,1],[345,750,2],[345,820,1],[345,850,2],[345,900,1],[345,960,1],[355,20,1],[355,140,1],[355,150,1],[355,160,1],[355,180,2],[355,220,1],[355,250,1],[355,280,1],[355,290,3],[355,300,1],[355,310,2],[355,320,2],[355,330,4],[355,460,1],[355,470,1],[355,510,1],[355,680,1],[355,750,1],[355,800,2],[355,810,1],[355,850,1],[364,150,1],[364,160,1],[364,170,1],[364,200,1],[364,230,1],[364,250,1],[364,290,1],[364,310,1],[364,430,1],[364,520,1],[364,700,1],[364,720,1],[364,760,1],[364,780,4],[364,900,1],[364,980,1],[374,90,1],[374,140,1],[374,150,2],[374,180,2],[374,190,2],[374,250,1],[374,260,2],[374,340,1],[374,450,1],[374,480,1],[374,490,1],[374,690,1],[374,870,1],[384,30,3],[384,40,1],[384,50,1],[384,80,1],[384,120,1],[384,140,1],[384,150,1],[384,180,1],[384,210,1],[384,250,4],[384,270,1],[384,300,1],[384,310,1],[384,350,1],[384,390,1],[384,400,2],[384,550,1],[384,560,1],[384,730,1],[384,780,1],[393,50,1],[393,70,1],[393,100,1],[393,140,1],[393,150,2],[393,160,1],[393,180,2],[393,210,1],[393,290,1],[393,310,1],[393,400,2],[393,450,1],[393,480,1],[393,510,1],[393,520,1],[393,600,1],[393,610,1],[393,620,1],[393,630,1],[393,640,1],[393,660,1],[393,680,1],[393,710,1],[393,720,1],[393,850,1],[403,160,1],[403,230,2],[403,250,1],[403,280,1],[403,390,1],[403,400,2],[403,450,1],[403,470,1],[403,500,2],[403,570,1],[403,600,1],[403,610,1],[403,640,4],[403,690,3],[403,720,1],[403,750,1],[412,150,1],[412,160,1],[412,210,1],[412,220,1],[412,250,1],[412,270,1],[412,280,2],[412,330,1],[412,380,2],[412,400,4],[412,450,1],[412,470,1],[412,480,1],[412,490,1],[412,520,1],[412,530,1],[412,560,1],[412,620,2],[412,650,1],[412,680,1],[412,700,1],[412,750,1],[412,840,1],[412,870,1],[422,30,1],[422,40,1],[422,60,1],[422,160,1],[422,170,2],[422,180,1],[422,200,1],[422,220,1],[422,400,1],[422,420,1],[422,450,1],[422,460,1],[422,480,1],[422,490,2],[422,510,1],[422,560,1],[422,600,1],[422,610,1],[422,620,1],[422,630,1],[422,640,1],[422,700,1],[422,710,2],[422,780,1],[432,110,1],[432,150,1],[432,170,1],[432,180,1],[432,240,1],[432,250,1],[432,260,1],[432,310,1],[432,330,1],[432,380,1],[432,430,1],[432,460,1],[432,480,1],[432,510,1],[432,520,1],[432,530,1],[432,620,3],[432,630,5],[432,660,1],[432,670,2],[432,680,1],[432,690,1],[432,730,3],[432,740,1],[432,750,2],[441,50,1],[441,120,1],[441,140,1],[441,150,1],[441,190,2],[441,220,1],[441,290,1],[441,330,1],[441,400,1],[441,410,1],[441,450,1],[441,480,2],[441,500,2],[441,510,1],[441,540,1],[441,570,1],[441,600,2],[441,610,3],[441,620,1],[441,680,3],[441,690,2],[441,730,1],[441,850,1],[441,870,1],[451,140,1],[451,150,3],[451,160,1],[451,220,1],[451,400,1],[451,410,1],[451,450,1],[451,460,1],[451,480,2],[451,560,1],[451,570,1],[451,590,1],[451,600,1],[451,610,4],[451,620,2],[451,870,1],[451,950,2],[460,140,1],[460,150,1],[460,160,1],[460,230,1],[460,300,1],[460,310,3],[460,320,3],[460,330,5],[460,340,8],[460,350,2],[460,400,1],[460,410,1],[460,440,2],[460,450,1],[460,470,1],[460,520,1],[460,630,1],[460,670,1],[460,720,1],[460,850,1],[470,10,1],[470,130,1],[470,140,2],[470,150,1],[470,180,1],[470,220,1],[470,260,1],[470,300,1],[470,330,1],[470,340,1],[470,360,3],[470,400,1],[470,450,1],[470,520,1],[470,600,1],[470,670,1],[470,700,1],[470,850,3],[480,200,1],[480,220,1],[480,290,2],[480,320,2],[480,330,7],[480,410,1],[480,450,2],[480,510,1],[480,540,1],[480,620,2],[480,650,1],[480,670,2],[480,700,1],[480,730,1],[489,20,1],[489,130,1],[489,140,1],[489,150,2],[489,160,1],[489,170,1],[489,190,1],[489,220,2],[489,230,1],[489,240,2],[489,250,2],[489,260,1],[489,270,3],[489,280,1],[489,290,1],[489,430,1],[489,450,1],[489,510,1],[489,640,2],[489,770,1],[489,780,1],[489,840,2],[489,880,1],[499,100,1],[499,110,1],[499,120,1],[499,130,1],[499,140,2],[499,160,2],[499,170,1],[499,180,1],[499,210,1],[499,220,1],[499,240,1],[499,310,2],[499,380,1],[499,410,1],[499,450,1],[499,530,1],[499,540,1],[499,650,2],[499,720,1],[499,790,6],[499,810,1],[508,20,1],[508,120,1],[508,130,2],[508,140,2],[508,150,1],[508,190,1],[508,280,2],[508,360,1],[508,410,1],[508,450,2],[508,490,1],[508,510,2],[508,760,2],[508,860,1],[518,20,1],[518,60,1],[518,100,1],[518,120,1],[518,140,1],[518,150,1],[518,160,1],[518,180,1],[518,200,1],[518,210,1],[518,400,1],[518,410,1],[518,500,1],[527,120,1],[527,140,1],[527,150,1],[527,220,18],[527,230,3],[527,240,1],[527,270,1],[527,300,3],[527,380,1],[527,450,1],[527,470,1],[527,480,1],[527,490,2],[527,500,1],[527,510,2],[527,570,1],[527,580,1],[527,650,7],[527,830,1],[537,140,1],[537,150,1],[537,160,1],[537,170,1],[537,270,1],[537,410,1],[537,450,1],[537,470,2],[537,490,1],[537,630,1],[537,670,2],[537,760,1],[537,880,2],[547,80,2],[547,160,1],[547,180,4],[547,260,2],[547,270,1],[547,280,1],[547,380,1],[547,390,1],[547,410,1],[547,420,1],[547,520,1],[547,630,1],[547,750,3],[547,770,2],[547,860,4],[556,50,1],[556,70,1],[556,130,2],[556,140,1],[556,160,1],[556,190,1],[556,230,5],[556,290,1],[556,300,1],[556,330,1],[556,390,11],[556,450,2],[556,460,13],[556,500,13],[556,520,6],[556,530,14],[556,600,3],[556,660,4],[566,140,1],[566,170,1],[566,180,1],[566,230,1],[566,260,1],[566,320,3],[566,360,1],[566,490,1],[566,830,3],[575,20,1],[575,140,2],[575,150,2],[575,160,1],[575,180,1],[575,260,11],[575,330,1],[575,410,2],[575,450,1],[585,90,1],[585,100,1],[585,140,1],[585,160,1],[585,180,1],[585,190,1],[585,200,1],[585,250,1],[585,310,1],[585,330,1],[585,830,1],[595,30,1],[595,70,2],[595,80,1],[595,90,1],[595,140,1],[595,160,1],[595,180,1],[595,200,1],[595,250,1],[595,280,1],[595,450,1],[595,530,1],[595,540,1],[604,20,1],[604,150,2],[604,180,1],[604,200,1],[604,290,1],[604,410,1],[604,830,1],[614,0,3],[614,20,1],[614,40,1],[614,140,1],[614,160,1],[614,180,1],[614,230,1],[614,430,1],[614,510,1],[623,200,1],[623,230,2],[623,300,1],[623,330,1],[623,410,1],[623,420,1],[623,520,1],[623,530,2],[623,570,5],[633,60,1],[633,150,1],[633,170,1],[633,190,1],[633,260,2],[633,400,1],[633,570,4],[633,830,1],[643,0,1],[643,70,1],[643,150,1],[643,330,2],[643,570,10],[643,590,1],[652,0,2],[652,140,1],[652,160,1],[652,180,2],[652,400,1],[652,470,1],[652,570,4],[652,830,1],[662,170,1],[662,180,1],[662,290,2],[662,400,1],[662,570,2],[671,0,1],[671,30,1],[671,160,1],[671,170,1],[671,310,1],[671,400,1],[671,720,1],[681,0,1],[681,160,1],[681,280,1],[681,320,1],[700,80,1],[700,170,1],[700,850,1],[710,240,1],[710,450,1],[719,80,1],[719,140,1],[719,150,1],[719,710,1],[729,240,1],[729,840,1],[738,10,1],[738,40,1],[738,450,1],[748,0,1],[758,300,1],[758,660,1],[767,270,2],[796,160,1],[806,970,1],[815,280,1],[815,300,1],[815,360,1],[825,790,1],[844,470,1],[901,270,1],[921,220,1],[921,340,1],[921,720,1],[930,490,1],[930,500,1],[940,180,2],[940,430,1],[940,510,1],[940,580,1],[949,120,5],[949,150,1],[949,180,1],[949,370,1],[949,390,1],[949,570,2],[949,720,1],[949,770,2],[949,780,1],[949,860,1]]; diff --git a/static/css/d3.css b/static/css/d3.css new file mode 100644 index 00000000..1c0944b1 --- /dev/null +++ b/static/css/d3.css @@ -0,0 +1,23 @@ +body { + font: 12px Arial; +} + + +path { + stroke-width: 2; + fill: none; +} + + +.axis path, .axis line { + fill: none; + stroke: grey; + stroke-width: 1; + shape-rendering: crispEdges; +} + + +.area { + fill: #F0F8FF; + stroke-width: 0; +} diff --git a/static/css/d3map.css b/static/css/d3map.css new file mode 100644 index 00000000..6e179234 --- /dev/null +++ b/static/css/d3map.css @@ -0,0 +1,8 @@ + body { text-align: center; font: 16px/1.4 "Helvetica Neue", Arial, sans-serif; } + a { color: #0077ff; } + .container { width: 1000px; height: 600px; margin: 0 auto; position: relative; border: 1px solid #ccc; } + .options { position: absolute; top: 0; right: 0; padding: 10px; background: rgba(255,255,255,0.6); + border-bottom: 1px solid #ccc; border-left: 1px solid #ccc; line-height: 1; } + .options input { width: 200px; } + .options label { width: 60px; float: left; text-align: right; margin-right: 10px; color: #555; } + .ghbtns { position: relative; top: 4px; margin-left: 5px; } \ No newline at end of file diff --git a/static/css/main.css b/static/css/main.css index 6a0e8c65..26c3bdc7 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -9,7 +9,7 @@ * Main elements ****************************************************************************/ html { - overflow-y: scroll; + overflow-y: visible; } a { cursor: pointer; @@ -26,6 +26,87 @@ a { background: #555; color: #FFF; } +body { + background-color: #383535; +} +.my-navbar { + background-color: #68da7c; + border-color: #425766; +} + + .my-navbar .navbar-brand { + color: black; + } + + .my-navbar .navbar-brand:hover, .my-navbar .navbar-brand:focus { + color: #AAD5FF; + } + + .my-navbar .navbar-text { + color: #d7e2e9; + } + + .my-navbar .navbar-nav > li > a { + color: #fff; + } + + .my-navbar .navbar-nav > li > a:hover, .my-navbar .navbar-nav > li > a:focus { + color: #fff; + background-color: #47B447; + } + + .my-navbar .navbar-nav > li > .dropdown-menu { + background-color: #2894FF; + } + + .my-navbar .navbar-nav > li > .dropdown-menu > li > a { + color: #d7e2e9; + } + + .my-navbar .navbar-nav > li > .dropdown-menu > li > a:hover, + .my-navbar .navbar-nav > li > .dropdown-menu > li > a:focus { + color: #fff; + background-color: #004182; + } + + .my-navbar .navbar-nav > li > .dropdown-menu > li > .divider { + background-color: #69899f; + } + + .my-navbar .navbar-nav > .active > a, .my-navbar .navbar-nav > .active > a:hover, .my-navbar .navbar-nav > .active > a:focus { + color: #e5dbdb; + background-color: #47B447; + } + + .my-navbar .navbar-nav > .open > a, .my-navbar .navbar-nav > .open > a:hover, .my-navbar .navbar-nav > .open > a:focus { + color: #e5dbdb; + background-color: #425766; + } + + .my-navbar .navbar-toggle { + border-color: #425766; + } + + .my-navbar .navbar-toggle:hover, .my-navbar .navbar-toggle:focus { + background-color: #425766; + } + + .my-navbar .navbar-toggle .icon-bar { + background-color: #d7e2e9; + } + + .my-navbar .navbar-collapse, + .my-navbar .navbar-form { + border-color: #d7e2e9; + } + + .my-navbar .navbar-link { + color: #d7e2e9; + } + + .my-navbar .navbar-link:hover { + color: #e5dbdb; + } /* Main elements end */ diff --git a/static/ico/favicon.png b/static/ico/favicon.png index 56aa877f..a2dfcc08 100755 Binary files a/static/ico/favicon.png and b/static/ico/favicon.png differ diff --git a/static/ico/logo.png b/static/ico/logo.png new file mode 100644 index 00000000..f9744ec9 Binary files /dev/null and b/static/ico/logo.png differ diff --git a/static/js/d3graph.js b/static/js/d3graph.js new file mode 100644 index 00000000..50274746 --- /dev/null +++ b/static/js/d3graph.js @@ -0,0 +1,102 @@ + + // Set the dimensions of the svg + var margin = {top: 30, right: 50, bottom: 30, left: 50}; + var svgWidth = 600; + var svgHeight = 270; + var graphWidth = svgWidth - margin.left - margin.right; + var graphHeight = svgHeight - margin.top - margin.bottom; + // Parse the date / time + var parseDate = d3.time.format("%Y-%m-%d").parse; + // Set the ranges + var x = d3.time.scale().range([0, graphWidth]); + var y = d3.scale.linear().range([graphHeight, 0]); + // Define the axes + var xAxis = d3.svg.axis().scale(x) + .orient("bottom").ticks(5); + var yAxis = d3.svg.axis().scale(y) + .orient("left").ticks(5); + // Define the High line + var highLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.High); }); + var closeLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.Close); }); + var lowLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.Low); }); + var area = d3.svg.area() + .x(function(d) { return x(d.Date); }) + .y0(function(d) { return y(d.Low); }) + .y1(function(d) { return y(d.High); }) + // Adds the svg canvas + var svg = d3.select("#graphDiv") + .append("svg") + .attr("width", svgWidth) + .attr("height", svgHeight) + .append("g") + .attr("transform", + "translate(" + margin.left + "," + margin.top + ")") + // define function + function draw(data) { + data.forEach(function(d) { + d.Date = parseDate(d.Date); + d.High = +d.High; + d.Close = +d.Close; + d.Low = +d.Low; + }); + // Scale the range of the data + x.domain(d3.extent(data, function(d) { return d.Date; })); + y.domain([d3.min(data, function(d) { + return Math.min(d.High, d.Close, d.Low) }), + d3.max(data, function(d) { + return Math.max(d.High, d.Close, d.Low) })]); + // Add the area path. + svg.append("path") + .datum(data) + .attr("class", "area") + .attr("d", area) + // Add the 2 valueline paths. + svg.append("path") + .style("stroke", "green") + .style("fill", "none") + .attr("class", "line") + .attr("d", highLine(data)); + svg.append("path") + .style("stroke", "blue") + .style("fill", "none") + .style("stroke-dasharray", ("3, 3")) + .attr("d", closeLine(data)); + svg.append("path") + .style("stroke", "red") + .attr("d", lowLine(data)); + // Add the X Axis + svg.append("g") + .attr("class", "x axis") + .attr("transform", "translate(0," + graphHeight + ")") + .call(xAxis); + // Add the Y Axis + svg.append("g") + .attr("class", "y axis") + .call(yAxis); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].High)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "green") + .text("High"); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].Low)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "red") + .text("Low"); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].Close)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "blue") + .text("Close"); + }; + +draw(graphData); \ No newline at end of file diff --git a/static/js/leafmap.js b/static/js/leafmap.js new file mode 100644 index 00000000..478fa783 --- /dev/null +++ b/static/js/leafmap.js @@ -0,0 +1,46 @@ + + +/*var testData = { + max: 50, + data: [ {lat: 24.6408, lng:46.7728, count: 3}, + {lat: 50.75, lng:-1.55, count: 1}, + {lat: 25.6586, lng:-85.3568, count: 11}] +}; +*/ + +// {s}, {z}, {x} and {y} are placeholders for map tiles +// {x} and {y} are the x/y of where you are on the map +// {z} is the zoom level +// {s} is the subdomain of cartodb +var layer = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', { + attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="http://cartodb.com/attributions">CartoDB</a>' +}); + + +// cfg short for 'config' +var cfg = { + // radius should be small ONLY if scaleRadius is true (or small radius is intended) + // if scaleRadius is false it will be the constant radius used in pixels + "radius": 2, + "maxOpacity": .8, + // scales the radius based on map zoom + "scaleRadius": true, + // if set to false the heatmap uses the global maximum for colorization + // if activated: uses the data maximum within the current map boundaries + // (there will always be a red spot with useLocalExtremas true) + "useLocalExtrema": true, + // which field name in your data represents the latitude - default "lat" + latField: 'lat', + // which field name in your data represents the longitude - default "lng" + lngField: 'lng', + // which field name in your data represents the data value - default "value" + valueField: 'count' +}; + + +var heatmapLayer = new HeatmapOverlay(cfg); +heatmapLayer.setData(testData); + +var map = L.map('map').setView([25.6586, -80.3568], 4); +map.addLayer(layer) +map.addLayer(heatmapLayer) \ No newline at end of file diff --git a/static/js/libs/d3.js b/static/js/libs/d3.js new file mode 100644 index 00000000..82287776 --- /dev/null +++ b/static/js/libs/d3.js @@ -0,0 +1,9233 @@ +!function() { + var d3 = { + version: "3.4.11" + }; + if (!Date.now) Date.now = function() { + return +new Date(); + }; + var d3_arraySlice = [].slice, d3_array = function(list) { + return d3_arraySlice.call(list); + }; + var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window; + try { + d3_array(d3_documentElement.childNodes)[0].nodeType; + } catch (e) { + d3_array = function(list) { + var i = list.length, array = new Array(i); + while (i--) array[i] = list[i]; + return array; + }; + } + try { + d3_document.createElement("div").style.setProperty("opacity", 0, ""); + } catch (error) { + var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; + d3_element_prototype.setAttribute = function(name, value) { + d3_element_setAttribute.call(this, name, value + ""); + }; + d3_element_prototype.setAttributeNS = function(space, local, value) { + d3_element_setAttributeNS.call(this, space, local, value + ""); + }; + d3_style_prototype.setProperty = function(name, value, priority) { + d3_style_setProperty.call(this, name, value + "", priority); + }; + } + d3.ascending = d3_ascending; + function d3_ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + d3.descending = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + }; + d3.min = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } else { + while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; + } + return a; + }; + d3.max = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } else { + while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; + } + return a; + }; + d3.extent = function(array, f) { + var i = -1, n = array.length, a, b, c; + if (arguments.length === 1) { + while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined; + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } else { + while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + return [ a, c ]; + }; + d3.sum = function(array, f) { + var s = 0, n = array.length, a, i = -1; + if (arguments.length === 1) { + while (++i < n) if (!isNaN(a = +array[i])) s += a; + } else { + while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; + } + return s; + }; + function d3_number(x) { + return x != null && !isNaN(x); + } + d3.mean = function(array, f) { + var s = 0, n = array.length, a, i = -1, j = n; + if (arguments.length === 1) { + while (++i < n) if (d3_number(a = array[i])) s += a; else --j; + } else { + while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j; + } + return j ? s / j : undefined; + }; + d3.quantile = function(values, p) { + var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; + return e ? v + e * (values[h] - v) : v; + }; + d3.median = function(array, f) { + if (arguments.length > 1) array = array.map(f); + array = array.filter(d3_number); + return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined; + }; + function d3_bisector(compare) { + return { + left: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; + } + return lo; + } + }; + } + var d3_bisect = d3_bisector(d3_ascending); + d3.bisectLeft = d3_bisect.left; + d3.bisect = d3.bisectRight = d3_bisect.right; + d3.bisector = function(f) { + return d3_bisector(f.length === 1 ? function(d, x) { + return d3_ascending(f(d), x); + } : f); + }; + d3.shuffle = function(array) { + var m = array.length, t, i; + while (m) { + i = Math.random() * m-- | 0; + t = array[m], array[m] = array[i], array[i] = t; + } + return array; + }; + d3.permute = function(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; + }; + d3.pairs = function(array) { + var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; + return pairs; + }; + d3.zip = function() { + if (!(n = arguments.length)) return []; + for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { + for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { + zip[j] = arguments[j][i]; + } + } + return zips; + }; + function d3_zipLength(d) { + return d.length; + } + d3.transpose = function(matrix) { + return d3.zip.apply(d3, matrix); + }; + d3.keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; + }; + d3.values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; + }; + d3.entries = function(map) { + var entries = []; + for (var key in map) entries.push({ + key: key, + value: map[key] + }); + return entries; + }; + d3.merge = function(arrays) { + var n = arrays.length, m, i = -1, j = 0, merged, array; + while (++i < n) j += arrays[i].length; + merged = new Array(j); + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + return merged; + }; + var abs = Math.abs; + d3.range = function(start, stop, step) { + if (arguments.length < 3) { + step = 1; + if (arguments.length < 2) { + stop = start; + start = 0; + } + } + if ((stop - start) / step === Infinity) throw new Error("infinite range"); + var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; + start *= k, stop *= k, step *= k; + if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); + return range; + }; + function d3_range_integerScale(x) { + var k = 1; + while (x * k % 1) k *= 10; + return k; + } + function d3_class(ctor, properties) { + try { + for (var key in properties) { + Object.defineProperty(ctor.prototype, key, { + value: properties[key], + enumerable: false + }); + } + } catch (e) { + ctor.prototype = properties; + } + } + d3.map = function(object) { + var map = new d3_Map(); + if (object instanceof d3_Map) object.forEach(function(key, value) { + map.set(key, value); + }); else for (var key in object) map.set(key, object[key]); + return map; + }; + function d3_Map() {} + d3_class(d3_Map, { + has: d3_map_has, + get: function(key) { + return this[d3_map_prefix + key]; + }, + set: function(key, value) { + return this[d3_map_prefix + key] = value; + }, + remove: d3_map_remove, + keys: d3_map_keys, + values: function() { + var values = []; + this.forEach(function(key, value) { + values.push(value); + }); + return values; + }, + entries: function() { + var entries = []; + this.forEach(function(key, value) { + entries.push({ + key: key, + value: value + }); + }); + return entries; + }, + size: d3_map_size, + empty: d3_map_empty, + forEach: function(f) { + for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]); + } + }); + var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); + function d3_map_has(key) { + return d3_map_prefix + key in this; + } + function d3_map_remove(key) { + key = d3_map_prefix + key; + return key in this && delete this[key]; + } + function d3_map_keys() { + var keys = []; + this.forEach(function(key) { + keys.push(key); + }); + return keys; + } + function d3_map_size() { + var size = 0; + for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size; + return size; + } + function d3_map_empty() { + for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false; + return true; + } + d3.nest = function() { + var nest = {}, keys = [], sortKeys = [], sortValues, rollup; + function map(mapType, array, depth) { + if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; + var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(object = array[i]))) { + values.push(object); + } else { + valuesByKey.set(keyValue, [ object ]); + } + } + if (mapType) { + object = mapType(); + setter = function(keyValue, values) { + object.set(keyValue, map(mapType, values, depth)); + }; + } else { + object = {}; + setter = function(keyValue, values) { + object[keyValue] = map(mapType, values, depth); + }; + } + valuesByKey.forEach(setter); + return object; + } + function entries(map, depth) { + if (depth >= keys.length) return map; + var array = [], sortKey = sortKeys[depth++]; + map.forEach(function(key, keyMap) { + array.push({ + key: key, + values: entries(keyMap, depth) + }); + }); + return sortKey ? array.sort(function(a, b) { + return sortKey(a.key, b.key); + }) : array; + } + nest.map = function(array, mapType) { + return map(mapType, array, 0); + }; + nest.entries = function(array) { + return entries(map(d3.map, array, 0), 0); + }; + nest.key = function(d) { + keys.push(d); + return nest; + }; + nest.sortKeys = function(order) { + sortKeys[keys.length - 1] = order; + return nest; + }; + nest.sortValues = function(order) { + sortValues = order; + return nest; + }; + nest.rollup = function(f) { + rollup = f; + return nest; + }; + return nest; + }; + d3.set = function(array) { + var set = new d3_Set(); + if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); + return set; + }; + function d3_Set() {} + d3_class(d3_Set, { + has: d3_map_has, + add: function(value) { + this[d3_map_prefix + value] = true; + return value; + }, + remove: function(value) { + value = d3_map_prefix + value; + return value in this && delete this[value]; + }, + values: d3_map_keys, + size: d3_map_size, + empty: d3_map_empty, + forEach: function(f) { + for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1)); + } + }); + d3.behavior = {}; + d3.rebind = function(target, source) { + var i = 1, n = arguments.length, method; + while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); + return target; + }; + function d3_rebind(target, source, method) { + return function() { + var value = method.apply(source, arguments); + return value === source ? target : value; + }; + } + function d3_vendorSymbol(object, name) { + if (name in object) return name; + name = name.charAt(0).toUpperCase() + name.substring(1); + for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { + var prefixName = d3_vendorPrefixes[i] + name; + if (prefixName in object) return prefixName; + } + } + var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; + function d3_noop() {} + d3.dispatch = function() { + var dispatch = new d3_dispatch(), i = -1, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + return dispatch; + }; + function d3_dispatch() {} + d3_dispatch.prototype.on = function(type, listener) { + var i = type.indexOf("."), name = ""; + if (i >= 0) { + name = type.substring(i + 1); + type = type.substring(0, i); + } + if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); + if (arguments.length === 2) { + if (listener == null) for (type in this) { + if (this.hasOwnProperty(type)) this[type].on(name, null); + } + return this; + } + }; + function d3_dispatch_event(dispatch) { + var listeners = [], listenerByName = new d3_Map(); + function event() { + var z = listeners, i = -1, n = z.length, l; + while (++i < n) if (l = z[i].on) l.apply(this, arguments); + return dispatch; + } + event.on = function(name, listener) { + var l = listenerByName.get(name), i; + if (arguments.length < 2) return l && l.on; + if (l) { + l.on = null; + listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); + listenerByName.remove(name); + } + if (listener) listeners.push(listenerByName.set(name, { + on: listener + })); + return dispatch; + }; + return event; + } + d3.event = null; + function d3_eventPreventDefault() { + d3.event.preventDefault(); + } + function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; + } + function d3_eventDispatch(target) { + var dispatch = new d3_dispatch(), i = 0, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + return dispatch; + } + d3.requote = function(s) { + return s.replace(d3_requote_re, "\\$&"); + }; + var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + var d3_subclass = {}.__proto__ ? function(object, prototype) { + object.__proto__ = prototype; + } : function(object, prototype) { + for (var property in prototype) object[property] = prototype[property]; + }; + function d3_selection(groups) { + d3_subclass(groups, d3_selectionPrototype); + return groups; + } + var d3_select = function(s, n) { + return n.querySelector(s); + }, d3_selectAll = function(s, n) { + return n.querySelectorAll(s); + }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) { + return d3_selectMatcher.call(n, s); + }; + if (typeof Sizzle === "function") { + d3_select = function(s, n) { + return Sizzle(s, n)[0] || null; + }; + d3_selectAll = Sizzle; + d3_selectMatches = Sizzle.matchesSelector; + } + d3.selection = function() { + return d3_selectionRoot; + }; + var d3_selectionPrototype = d3.selection.prototype = []; + d3_selectionPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, group, node; + selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(subnode = selector.call(node, node.__data__, i, j)); + if (subnode && "__data__" in node) subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_selector(selector) { + return typeof selector === "function" ? selector : function() { + return d3_select(selector, this); + }; + } + d3_selectionPrototype.selectAll = function(selector) { + var subgroups = [], subgroup, node; + selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); + subgroup.parentNode = node; + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_selectorAll(selector) { + return typeof selector === "function" ? selector : function() { + return d3_selectAll(selector, this); + }; + } + var d3_nsPrefix = { + svg: "http://www.w3.org/2000/svg", + xhtml: "http://www.w3.org/1999/xhtml", + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + d3.ns = { + prefix: d3_nsPrefix, + qualify: function(name) { + var i = name.indexOf(":"), prefix = name; + if (i >= 0) { + prefix = name.substring(0, i); + name = name.substring(i + 1); + } + return d3_nsPrefix.hasOwnProperty(prefix) ? { + space: d3_nsPrefix[prefix], + local: name + } : name; + } + }; + d3_selectionPrototype.attr = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(); + name = d3.ns.qualify(name); + return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); + } + for (value in name) this.each(d3_selection_attr(value, name[value])); + return this; + } + return this.each(d3_selection_attr(name, value)); + }; + function d3_selection_attr(name, value) { + name = d3.ns.qualify(name); + function attrNull() { + this.removeAttribute(name); + } + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + function attrConstant() { + this.setAttribute(name, value); + } + function attrConstantNS() { + this.setAttributeNS(name.space, name.local, value); + } + function attrFunction() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); + } + function attrFunctionNS() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); + } + return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; + } + function d3_collapse(s) { + return s.trim().replace(/\s+/g, " "); + } + d3_selectionPrototype.classed = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; + if (value = node.classList) { + while (++i < n) if (!value.contains(name[i])) return false; + } else { + value = node.getAttribute("class"); + while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; + } + return true; + } + for (value in name) this.each(d3_selection_classed(value, name[value])); + return this; + } + return this.each(d3_selection_classed(name, value)); + }; + function d3_selection_classedRe(name) { + return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); + } + function d3_selection_classes(name) { + return (name + "").trim().split(/^|\s+/); + } + function d3_selection_classed(name, value) { + name = d3_selection_classes(name).map(d3_selection_classedName); + var n = name.length; + function classedConstant() { + var i = -1; + while (++i < n) name[i](this, value); + } + function classedFunction() { + var i = -1, x = value.apply(this, arguments); + while (++i < n) name[i](this, x); + } + return typeof value === "function" ? classedFunction : classedConstant; + } + function d3_selection_classedName(name) { + var re = d3_selection_classedRe(name); + return function(node, value) { + if (c = node.classList) return value ? c.add(name) : c.remove(name); + var c = node.getAttribute("class") || ""; + if (value) { + re.lastIndex = 0; + if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); + } else { + node.setAttribute("class", d3_collapse(c.replace(re, " "))); + } + }; + } + d3_selectionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); + return this; + } + if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name); + priority = ""; + } + return this.each(d3_selection_style(name, value, priority)); + }; + function d3_selection_style(name, value, priority) { + function styleNull() { + this.style.removeProperty(name); + } + function styleConstant() { + this.style.setProperty(name, value, priority); + } + function styleFunction() { + var x = value.apply(this, arguments); + if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); + } + return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; + } + d3_selectionPrototype.property = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") return this.node()[name]; + for (value in name) this.each(d3_selection_property(value, name[value])); + return this; + } + return this.each(d3_selection_property(name, value)); + }; + function d3_selection_property(name, value) { + function propertyNull() { + delete this[name]; + } + function propertyConstant() { + this[name] = value; + } + function propertyFunction() { + var x = value.apply(this, arguments); + if (x == null) delete this[name]; else this[name] = x; + } + return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; + } + d3_selectionPrototype.text = function(value) { + return arguments.length ? this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + } : value == null ? function() { + this.textContent = ""; + } : function() { + this.textContent = value; + }) : this.node().textContent; + }; + d3_selectionPrototype.html = function(value) { + return arguments.length ? this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + } : value == null ? function() { + this.innerHTML = ""; + } : function() { + this.innerHTML = value; + }) : this.node().innerHTML; + }; + d3_selectionPrototype.append = function(name) { + name = d3_selection_creator(name); + return this.select(function() { + return this.appendChild(name.apply(this, arguments)); + }); + }; + function d3_selection_creator(name) { + return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() { + return this.ownerDocument.createElementNS(name.space, name.local); + } : function() { + return this.ownerDocument.createElementNS(this.namespaceURI, name); + }; + } + d3_selectionPrototype.insert = function(name, before) { + name = d3_selection_creator(name); + before = d3_selection_selector(before); + return this.select(function() { + return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); + }); + }; + d3_selectionPrototype.remove = function() { + return this.each(function() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + }); + }; + d3_selectionPrototype.data = function(value, key) { + var i = -1, n = this.length, group, node; + if (!arguments.length) { + value = new Array(n = (group = this[0]).length); + while (++i < n) { + if (node = group[i]) { + value[i] = node.__data__; + } + } + return value; + } + function bind(group, groupData) { + var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; + if (key) { + var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue; + for (i = -1; ++i < n; ) { + keyValue = key.call(node = group[i], node.__data__, i); + if (nodeByKeyValue.has(keyValue)) { + exitNodes[i] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + keyValues.push(keyValue); + } + for (i = -1; ++i < m; ) { + keyValue = key.call(groupData, nodeData = groupData[i], i); + if (node = nodeByKeyValue.get(keyValue)) { + updateNodes[i] = node; + node.__data__ = nodeData; + } else if (!dataByKeyValue.has(keyValue)) { + enterNodes[i] = d3_selection_dataNode(nodeData); + } + dataByKeyValue.set(keyValue, nodeData); + nodeByKeyValue.remove(keyValue); + } + for (i = -1; ++i < n; ) { + if (nodeByKeyValue.has(keyValues[i])) { + exitNodes[i] = group[i]; + } + } + } else { + for (i = -1; ++i < n0; ) { + node = group[i]; + nodeData = groupData[i]; + if (node) { + node.__data__ = nodeData; + updateNodes[i] = node; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + } + } + for (;i < m; ++i) { + enterNodes[i] = d3_selection_dataNode(groupData[i]); + } + for (;i < n; ++i) { + exitNodes[i] = group[i]; + } + } + enterNodes.update = updateNodes; + enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; + enter.push(enterNodes); + update.push(updateNodes); + exit.push(exitNodes); + } + var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); + if (typeof value === "function") { + while (++i < n) { + bind(group = this[i], value.call(group, group.parentNode.__data__, i)); + } + } else { + while (++i < n) { + bind(group = this[i], value); + } + } + update.enter = function() { + return enter; + }; + update.exit = function() { + return exit; + }; + return update; + }; + function d3_selection_dataNode(data) { + return { + __data__: data + }; + } + d3_selectionPrototype.datum = function(value) { + return arguments.length ? this.property("__data__", value) : this.property("__data__"); + }; + d3_selectionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node); + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_filter(selector) { + return function() { + return d3_selectMatches(this, selector); + }; + } + d3_selectionPrototype.order = function() { + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + return this; + }; + d3_selectionPrototype.sort = function(comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments); + for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); + return this.order(); + }; + function d3_selection_sortComparator(comparator) { + if (!arguments.length) comparator = d3_ascending; + return function(a, b) { + return a && b ? comparator(a.__data__, b.__data__) : !a - !b; + }; + } + d3_selectionPrototype.each = function(callback) { + return d3_selection_each(this, function(node, i, j) { + callback.call(node, node.__data__, i, j); + }); + }; + function d3_selection_each(groups, callback) { + for (var j = 0, m = groups.length; j < m; j++) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { + if (node = group[i]) callback(node, i, j); + } + } + return groups; + } + d3_selectionPrototype.call = function(callback) { + var args = d3_array(arguments); + callback.apply(args[0] = this, args); + return this; + }; + d3_selectionPrototype.empty = function() { + return !this.node(); + }; + d3_selectionPrototype.node = function() { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i]; + if (node) return node; + } + } + return null; + }; + d3_selectionPrototype.size = function() { + var n = 0; + this.each(function() { + ++n; + }); + return n; + }; + function d3_selection_enter(selection) { + d3_subclass(selection, d3_selection_enterPrototype); + return selection; + } + var d3_selection_enterPrototype = []; + d3.selection.enter = d3_selection_enter; + d3.selection.enter.prototype = d3_selection_enterPrototype; + d3_selection_enterPrototype.append = d3_selectionPrototype.append; + d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; + d3_selection_enterPrototype.node = d3_selectionPrototype.node; + d3_selection_enterPrototype.call = d3_selectionPrototype.call; + d3_selection_enterPrototype.size = d3_selectionPrototype.size; + d3_selection_enterPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, upgroup, group, node; + for (var j = -1, m = this.length; ++j < m; ) { + upgroup = (group = this[j]).update; + subgroups.push(subgroup = []); + subgroup.parentNode = group.parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); + subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + d3_selection_enterPrototype.insert = function(name, before) { + if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); + return d3_selectionPrototype.insert.call(this, name, before); + }; + function d3_selection_enterInsertBefore(enter) { + var i0, j0; + return function(d, i, j) { + var group = enter[j].update, n = group.length, node; + if (j != j0) j0 = j, i0 = 0; + if (i >= i0) i0 = i + 1; + while (!(node = group[i0]) && ++i0 < n) ; + return node; + }; + } + d3_selectionPrototype.transition = function() { + var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || { + time: Date.now(), + ease: d3_ease_cubicInOut, + delay: 0, + duration: 250 + }; + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) d3_transitionNode(node, i, id, transition); + subgroup.push(node); + } + } + return d3_transition(subgroups, id); + }; + d3_selectionPrototype.interrupt = function() { + return this.each(d3_selection_interrupt); + }; + function d3_selection_interrupt() { + var lock = this.__transition__; + if (lock) ++lock.active; + } + d3.select = function(node) { + var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ]; + group.parentNode = d3_documentElement; + return d3_selection([ group ]); + }; + d3.selectAll = function(nodes) { + var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes); + group.parentNode = d3_documentElement; + return d3_selection([ group ]); + }; + var d3_selectionRoot = d3.select(d3_documentElement); + d3_selectionPrototype.on = function(type, listener, capture) { + var n = arguments.length; + if (n < 3) { + if (typeof type !== "string") { + if (n < 2) listener = false; + for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); + return this; + } + if (n < 2) return (n = this.node()["__on" + type]) && n._; + capture = false; + } + return this.each(d3_selection_on(type, listener, capture)); + }; + function d3_selection_on(type, listener, capture) { + var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; + if (i > 0) type = type.substring(0, i); + var filter = d3_selection_onFilters.get(type); + if (filter) type = filter, wrap = d3_selection_onFilter; + function onRemove() { + var l = this[name]; + if (l) { + this.removeEventListener(type, l, l.$); + delete this[name]; + } + } + function onAdd() { + var l = wrap(listener, d3_array(arguments)); + onRemove.call(this); + this.addEventListener(type, this[name] = l, l.$ = capture); + l._ = listener; + } + function removeAll() { + var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; + for (var name in this) { + if (match = name.match(re)) { + var l = this[name]; + this.removeEventListener(match[1], l, l.$); + delete this[name]; + } + } + } + return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; + } + var d3_selection_onFilters = d3.map({ + mouseenter: "mouseover", + mouseleave: "mouseout" + }); + d3_selection_onFilters.forEach(function(k) { + if ("on" + k in d3_document) d3_selection_onFilters.remove(k); + }); + function d3_selection_onListener(listener, argumentz) { + return function(e) { + var o = d3.event; + d3.event = e; + argumentz[0] = this.__data__; + try { + listener.apply(this, argumentz); + } finally { + d3.event = o; + } + }; + } + function d3_selection_onFilter(listener, argumentz) { + var l = d3_selection_onListener(listener, argumentz); + return function(e) { + var target = this, related = e.relatedTarget; + if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { + l.call(target, e); + } + }; + } + var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0; + function d3_event_dragSuppress() { + var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault); + if (d3_event_dragSelect) { + var style = d3_documentElement.style, select = style[d3_event_dragSelect]; + style[d3_event_dragSelect] = "none"; + } + return function(suppressClick) { + w.on(name, null); + if (d3_event_dragSelect) style[d3_event_dragSelect] = select; + if (suppressClick) { + function off() { + w.on(click, null); + } + w.on(click, function() { + d3_eventPreventDefault(); + off(); + }, true); + setTimeout(off, 0); + } + }; + } + d3.mouse = function(container) { + return d3_mousePoint(container, d3_eventSource()); + }; + var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0; + function d3_mousePoint(container, e) { + if (e.changedTouches) e = e.changedTouches[0]; + var svg = container.ownerSVGElement || container; + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) { + svg = d3.select("body").append("svg").style({ + position: "absolute", + top: 0, + left: 0, + margin: 0, + padding: 0, + border: "none" + }, "important"); + var ctm = svg[0][0].getScreenCTM(); + d3_mouse_bug44083 = !(ctm.f || ctm.e); + svg.remove(); + } + if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, + point.y = e.clientY; + point = point.matrixTransform(container.getScreenCTM().inverse()); + return [ point.x, point.y ]; + } + var rect = container.getBoundingClientRect(); + return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; + } + d3.touches = function(container, touches) { + if (arguments.length < 2) touches = d3_eventSource().touches; + return touches ? d3_array(touches).map(function(touch) { + var point = d3_mousePoint(container, touch); + point.identifier = touch.identifier; + return point; + }) : []; + }; + d3.behavior.drag = function() { + var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend"); + function drag() { + this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); + } + function dragstart(id, position, subject, move, end) { + return function() { + var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId); + if (origin) { + dragOffset = origin.apply(that, arguments); + dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; + } else { + dragOffset = [ 0, 0 ]; + } + dispatch({ + type: "dragstart" + }); + function moved() { + var position1 = position(parent, dragId), dx, dy; + if (!position1) return; + dx = position1[0] - position0[0]; + dy = position1[1] - position0[1]; + dragged |= dx | dy; + position0 = position1; + dispatch({ + type: "drag", + x: position1[0] + dragOffset[0], + y: position1[1] + dragOffset[1], + dx: dx, + dy: dy + }); + } + function ended() { + if (!position(parent, dragId)) return; + dragSubject.on(move + dragName, null).on(end + dragName, null); + dragRestore(dragged && d3.event.target === target); + dispatch({ + type: "dragend" + }); + } + }; + } + drag.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return drag; + }; + return d3.rebind(drag, event, "on"); + }; + function d3_behavior_dragTouchId() { + return d3.event.changedTouches[0].identifier; + } + function d3_behavior_dragTouchSubject() { + return d3.event.target; + } + function d3_behavior_dragMouseSubject() { + return d3_window; + } + var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π; + function d3_sgn(x) { + return x > 0 ? 1 : x < 0 ? -1 : 0; + } + function d3_cross2d(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); + } + function d3_acos(x) { + return x > 1 ? 0 : x < -1 ? π : Math.acos(x); + } + function d3_asin(x) { + return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); + } + function d3_sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; + } + function d3_cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; + } + function d3_tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); + } + function d3_haversin(x) { + return (x = Math.sin(x / 2)) * x; + } + var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; + d3.interpolateZoom = function(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; + var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ; + function interpolate(t) { + var s = t * S; + if (dr) { + var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); + return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; + } + return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ]; + } + interpolate.duration = S * 1e3; + return interpolate; + }; + d3.behavior.zoom = function() { + var view = { + x: 0, + y: 0, + k: 1 + }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1; + function zoom(g) { + g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); + } + zoom.event = function(g) { + g.each(function() { + var dispatch = event.of(this, arguments), view1 = view; + if (d3_transitionInheritId) { + d3.select(this).transition().each("start.zoom", function() { + view = this.__chart__ || { + x: 0, + y: 0, + k: 1 + }; + zoomstarted(dispatch); + }).tween("zoom:zoom", function() { + var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); + return function(t) { + var l = i(t), k = dx / l[2]; + this.__chart__ = view = { + x: cx - l[0] * k, + y: cy - l[1] * k, + k: k + }; + zoomed(dispatch); + }; + }).each("end.zoom", function() { + zoomended(dispatch); + }); + } else { + this.__chart__ = view; + zoomstarted(dispatch); + zoomed(dispatch); + zoomended(dispatch); + } + }); + }; + zoom.translate = function(_) { + if (!arguments.length) return [ view.x, view.y ]; + view = { + x: +_[0], + y: +_[1], + k: view.k + }; + rescale(); + return zoom; + }; + zoom.scale = function(_) { + if (!arguments.length) return view.k; + view = { + x: view.x, + y: view.y, + k: +_ + }; + rescale(); + return zoom; + }; + zoom.scaleExtent = function(_) { + if (!arguments.length) return scaleExtent; + scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; + return zoom; + }; + zoom.center = function(_) { + if (!arguments.length) return center; + center = _ && [ +_[0], +_[1] ]; + return zoom; + }; + zoom.size = function(_) { + if (!arguments.length) return size; + size = _ && [ +_[0], +_[1] ]; + return zoom; + }; + zoom.x = function(z) { + if (!arguments.length) return x1; + x1 = z; + x0 = z.copy(); + view = { + x: 0, + y: 0, + k: 1 + }; + return zoom; + }; + zoom.y = function(z) { + if (!arguments.length) return y1; + y1 = z; + y0 = z.copy(); + view = { + x: 0, + y: 0, + k: 1 + }; + return zoom; + }; + function location(p) { + return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; + } + function point(l) { + return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; + } + function scaleTo(s) { + view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); + } + function translateTo(p, l) { + l = point(l); + view.x += p[0] - l[0]; + view.y += p[1] - l[1]; + } + function rescale() { + if (x1) x1.domain(x0.range().map(function(x) { + return (x - view.x) / view.k; + }).map(x0.invert)); + if (y1) y1.domain(y0.range().map(function(y) { + return (y - view.y) / view.k; + }).map(y0.invert)); + } + function zoomstarted(dispatch) { + dispatch({ + type: "zoomstart" + }); + } + function zoomed(dispatch) { + rescale(); + dispatch({ + type: "zoom", + scale: view.k, + translate: [ view.x, view.y ] + }); + } + function zoomended(dispatch) { + dispatch({ + type: "zoomend" + }); + } + function mousedowned() { + var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(); + d3_selection_interrupt.call(that); + zoomstarted(dispatch); + function moved() { + dragged = 1; + translateTo(d3.mouse(that), location0); + zoomed(dispatch); + } + function ended() { + subject.on(mousemove, null).on(mouseup, null); + dragRestore(dragged && d3.event.target === target); + zoomended(dispatch); + } + } + function touchstarted() { + var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress(); + d3_selection_interrupt.call(that); + started(); + zoomstarted(dispatch); + function relocate() { + var touches = d3.touches(that); + scale0 = view.k; + touches.forEach(function(t) { + if (t.identifier in locations0) locations0[t.identifier] = location(t); + }); + return touches; + } + function started() { + var target = d3.event.target; + d3.select(target).on(touchmove, moved).on(touchend, ended); + targets.push(target); + var changed = d3.event.changedTouches; + for (var i = 0, n = changed.length; i < n; ++i) { + locations0[changed[i].identifier] = null; + } + var touches = relocate(), now = Date.now(); + if (touches.length === 1) { + if (now - touchtime < 500) { + var p = touches[0], l = locations0[p.identifier]; + scaleTo(view.k * 2); + translateTo(p, l); + d3_eventPreventDefault(); + zoomed(dispatch); + } + touchtime = now; + } else if (touches.length > 1) { + var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; + distance0 = dx * dx + dy * dy; + } + } + function moved() { + var touches = d3.touches(that), p0, l0, p1, l1; + for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { + p1 = touches[i]; + if (l1 = locations0[p1.identifier]) { + if (l0) break; + p0 = p1, l0 = l1; + } + } + if (l1) { + var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); + p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; + l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; + scaleTo(scale1 * scale0); + } + touchtime = null; + translateTo(p0, l0); + zoomed(dispatch); + } + function ended() { + if (d3.event.touches.length) { + var changed = d3.event.changedTouches; + for (var i = 0, n = changed.length; i < n; ++i) { + delete locations0[changed[i].identifier]; + } + for (var identifier in locations0) { + return void relocate(); + } + } + d3.selectAll(targets).on(zoomName, null); + subject.on(mousedown, mousedowned).on(touchstart, touchstarted); + dragRestore(); + zoomended(dispatch); + } + } + function mousewheeled() { + var dispatch = event.of(this, arguments); + if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), + d3_selection_interrupt.call(this), zoomstarted(dispatch); + mousewheelTimer = setTimeout(function() { + mousewheelTimer = null; + zoomended(dispatch); + }, 50); + d3_eventPreventDefault(); + scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); + translateTo(center0, translate0); + zoomed(dispatch); + } + function dblclicked() { + var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2; + zoomstarted(dispatch); + scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1)); + translateTo(p, l); + zoomed(dispatch); + zoomended(dispatch); + } + return d3.rebind(zoom, event, "on"); + }; + var d3_behavior_zoomInfinity = [ 0, Infinity ]; + var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { + return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); + }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { + return d3.event.wheelDelta; + }, "mousewheel") : (d3_behavior_zoomDelta = function() { + return -d3.event.detail; + }, "MozMousePixelScroll"); + d3.color = d3_color; + function d3_color() {} + d3_color.prototype.toString = function() { + return this.rgb() + ""; + }; + d3.hsl = d3_hsl; + function d3_hsl(h, s, l) { + return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l); + } + var d3_hslPrototype = d3_hsl.prototype = new d3_color(); + d3_hslPrototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_hsl(this.h, this.s, this.l / k); + }; + d3_hslPrototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_hsl(this.h, this.s, k * this.l); + }; + d3_hslPrototype.rgb = function() { + return d3_hsl_rgb(this.h, this.s, this.l); + }; + function d3_hsl_rgb(h, s, l) { + var m1, m2; + h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; + s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; + l = l < 0 ? 0 : l > 1 ? 1 : l; + m2 = l <= .5 ? l * (1 + s) : l + s - l * s; + m1 = 2 * l - m2; + function v(h) { + if (h > 360) h -= 360; else if (h < 0) h += 360; + if (h < 60) return m1 + (m2 - m1) * h / 60; + if (h < 180) return m2; + if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; + return m1; + } + function vv(h) { + return Math.round(v(h) * 255); + } + return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); + } + d3.hcl = d3_hcl; + function d3_hcl(h, c, l) { + return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l); + } + var d3_hclPrototype = d3_hcl.prototype = new d3_color(); + d3_hclPrototype.brighter = function(k) { + return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); + }; + d3_hclPrototype.darker = function(k) { + return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); + }; + d3_hclPrototype.rgb = function() { + return d3_hcl_lab(this.h, this.c, this.l).rgb(); + }; + function d3_hcl_lab(h, c, l) { + if (isNaN(h)) h = 0; + if (isNaN(c)) c = 0; + return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); + } + d3.lab = d3_lab; + function d3_lab(l, a, b) { + return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b); + } + var d3_lab_K = 18; + var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; + var d3_labPrototype = d3_lab.prototype = new d3_color(); + d3_labPrototype.brighter = function(k) { + return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_labPrototype.darker = function(k) { + return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_labPrototype.rgb = function() { + return d3_lab_rgb(this.l, this.a, this.b); + }; + function d3_lab_rgb(l, a, b) { + var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; + x = d3_lab_xyz(x) * d3_lab_X; + y = d3_lab_xyz(y) * d3_lab_Y; + z = d3_lab_xyz(z) * d3_lab_Z; + return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); + } + function d3_lab_hcl(l, a, b) { + return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l); + } + function d3_lab_xyz(x) { + return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; + } + function d3_xyz_lab(x) { + return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; + } + function d3_xyz_rgb(r) { + return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); + } + d3.rgb = d3_rgb; + function d3_rgb(r, g, b) { + return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b); + } + function d3_rgbNumber(value) { + return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); + } + function d3_rgbString(value) { + return d3_rgbNumber(value) + ""; + } + var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); + d3_rgbPrototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + var r = this.r, g = this.g, b = this.b, i = 30; + if (!r && !g && !b) return new d3_rgb(i, i, i); + if (r && r < i) r = i; + if (g && g < i) g = i; + if (b && b < i) b = i; + return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); + }; + d3_rgbPrototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_rgb(k * this.r, k * this.g, k * this.b); + }; + d3_rgbPrototype.hsl = function() { + return d3_rgb_hsl(this.r, this.g, this.b); + }; + d3_rgbPrototype.toString = function() { + return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); + }; + function d3_rgb_hex(v) { + return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); + } + function d3_rgb_parse(format, rgb, hsl) { + var r = 0, g = 0, b = 0, m1, m2, color; + m1 = /([a-z]+)\((.*)\)/i.exec(format); + if (m1) { + m2 = m1[2].split(","); + switch (m1[1]) { + case "hsl": + { + return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); + } + + case "rgb": + { + return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); + } + } + } + if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b); + if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.substring(1), 16))) { + if (format.length === 4) { + r = (color & 3840) >> 4; + r = r >> 4 | r; + g = color & 240; + g = g >> 4 | g; + b = color & 15; + b = b << 4 | b; + } else if (format.length === 7) { + r = (color & 16711680) >> 16; + g = (color & 65280) >> 8; + b = color & 255; + } + } + return rgb(r, g, b); + } + function d3_rgb_hsl(r, g, b) { + var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; + if (d) { + s = l < .5 ? d / (max + min) : d / (2 - max - min); + if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; + h *= 60; + } else { + h = NaN; + s = l > 0 && l < 1 ? 0 : h; + } + return new d3_hsl(h, s, l); + } + function d3_rgb_lab(r, g, b) { + r = d3_rgb_xyz(r); + g = d3_rgb_xyz(g); + b = d3_rgb_xyz(b); + var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); + return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); + } + function d3_rgb_xyz(r) { + return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); + } + function d3_rgb_parseNumber(c) { + var f = parseFloat(c); + return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; + } + var d3_rgb_names = d3.map({ + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }); + d3_rgb_names.forEach(function(key, value) { + d3_rgb_names.set(key, d3_rgbNumber(value)); + }); + function d3_functor(v) { + return typeof v === "function" ? v : function() { + return v; + }; + } + d3.functor = d3_functor; + function d3_identity(d) { + return d; + } + d3.xhr = d3_xhrType(d3_identity); + function d3_xhrType(response) { + return function(url, mimeType, callback) { + if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, + mimeType = null; + return d3_xhr(url, mimeType, response, callback); + }; + } + function d3_xhr(url, mimeType, response, callback) { + var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; + if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); + "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { + request.readyState > 3 && respond(); + }; + function respond() { + var status = request.status, result; + if (!status && request.responseText || status >= 200 && status < 300 || status === 304) { + try { + result = response.call(xhr, request); + } catch (e) { + dispatch.error.call(xhr, e); + return; + } + dispatch.load.call(xhr, result); + } else { + dispatch.error.call(xhr, request); + } + } + request.onprogress = function(event) { + var o = d3.event; + d3.event = event; + try { + dispatch.progress.call(xhr, request); + } finally { + d3.event = o; + } + }; + xhr.header = function(name, value) { + name = (name + "").toLowerCase(); + if (arguments.length < 2) return headers[name]; + if (value == null) delete headers[name]; else headers[name] = value + ""; + return xhr; + }; + xhr.mimeType = function(value) { + if (!arguments.length) return mimeType; + mimeType = value == null ? null : value + ""; + return xhr; + }; + xhr.responseType = function(value) { + if (!arguments.length) return responseType; + responseType = value; + return xhr; + }; + xhr.response = function(value) { + response = value; + return xhr; + }; + [ "get", "post" ].forEach(function(method) { + xhr[method] = function() { + return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); + }; + }); + xhr.send = function(method, data, callback) { + if (arguments.length === 2 && typeof data === "function") callback = data, data = null; + request.open(method, url, true); + if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; + if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); + if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); + if (responseType != null) request.responseType = responseType; + if (callback != null) xhr.on("error", callback).on("load", function(request) { + callback(null, request); + }); + dispatch.beforesend.call(xhr, request); + request.send(data == null ? null : data); + return xhr; + }; + xhr.abort = function() { + request.abort(); + return xhr; + }; + d3.rebind(xhr, dispatch, "on"); + return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); + } + function d3_xhr_fixCallback(callback) { + return callback.length === 1 ? function(error, request) { + callback(error == null ? request : null); + } : callback; + } + d3.dsv = function(delimiter, mimeType) { + var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); + function dsv(url, row, callback) { + if (arguments.length < 3) callback = row, row = null; + var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); + xhr.row = function(_) { + return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; + }; + return xhr; + } + function response(request) { + return dsv.parse(request.responseText); + } + function typedResponse(f) { + return function(request) { + return dsv.parse(request.responseText, f); + }; + } + dsv.parse = function(text, f) { + var o; + return dsv.parseRows(text, function(row, i) { + if (o) return o(row, i - 1); + var a = new Function("d", "return {" + row.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "]"; + }).join(",") + "}"); + o = f ? function(row, i) { + return f(a(row), i); + } : a; + }); + }; + dsv.parseRows = function(text, f) { + var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; + function token() { + if (I >= N) return EOF; + if (eol) return eol = false, EOL; + var j = I; + if (text.charCodeAt(j) === 34) { + var i = j; + while (i++ < N) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break; + ++i; + } + } + I = i + 2; + var c = text.charCodeAt(i + 1); + if (c === 13) { + eol = true; + if (text.charCodeAt(i + 2) === 10) ++I; + } else if (c === 10) { + eol = true; + } + return text.substring(j + 1, i).replace(/""/g, '"'); + } + while (I < N) { + var c = text.charCodeAt(I++), k = 1; + if (c === 10) eol = true; else if (c === 13) { + eol = true; + if (text.charCodeAt(I) === 10) ++I, ++k; + } else if (c !== delimiterCode) continue; + return text.substring(j, I - k); + } + return text.substring(j); + } + while ((t = token()) !== EOF) { + var a = []; + while (t !== EOL && t !== EOF) { + a.push(t); + t = token(); + } + if (f && !(a = f(a, n++))) continue; + rows.push(a); + } + return rows; + }; + dsv.format = function(rows) { + if (Array.isArray(rows[0])) return dsv.formatRows(rows); + var fieldSet = new d3_Set(), fields = []; + rows.forEach(function(row) { + for (var field in row) { + if (!fieldSet.has(field)) { + fields.push(fieldSet.add(field)); + } + } + }); + return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { + return fields.map(function(field) { + return formatValue(row[field]); + }).join(delimiter); + })).join("\n"); + }; + dsv.formatRows = function(rows) { + return rows.map(formatRow).join("\n"); + }; + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + function formatValue(text) { + return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; + } + return dsv; + }; + d3.csv = d3.dsv(",", "text/csv"); + d3.tsv = d3.dsv(" ", "text/tab-separated-values"); + d3.touch = function(container, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; + if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return d3_mousePoint(container, touch); + } + } + }; + var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) { + setTimeout(callback, 17); + }; + d3.timer = function(callback, delay, then) { + var n = arguments.length; + if (n < 2) delay = 0; + if (n < 3) then = Date.now(); + var time = then + delay, timer = { + c: callback, + t: time, + f: false, + n: null + }; + if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; + d3_timer_queueTail = timer; + if (!d3_timer_interval) { + d3_timer_timeout = clearTimeout(d3_timer_timeout); + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + }; + function d3_timer_step() { + var now = d3_timer_mark(), delay = d3_timer_sweep() - now; + if (delay > 24) { + if (isFinite(delay)) { + clearTimeout(d3_timer_timeout); + d3_timer_timeout = setTimeout(d3_timer_step, delay); + } + d3_timer_interval = 0; + } else { + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + } + d3.timer.flush = function() { + d3_timer_mark(); + d3_timer_sweep(); + }; + function d3_timer_mark() { + var now = Date.now(); + d3_timer_active = d3_timer_queueHead; + while (d3_timer_active) { + if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t); + d3_timer_active = d3_timer_active.n; + } + return now; + } + function d3_timer_sweep() { + var t0, t1 = d3_timer_queueHead, time = Infinity; + while (t1) { + if (t1.f) { + t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; + } else { + if (t1.t < time) time = t1.t; + t1 = (t0 = t1).n; + } + } + d3_timer_queueTail = t0; + return time; + } + function d3_format_precision(x, p) { + return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); + } + d3.round = function(x, n) { + return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); + }; + var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); + d3.formatPrefix = function(value, precision) { + var i = 0; + if (value) { + if (value < 0) value *= -1; + if (precision) value = d3.round(value, d3_format_precision(value, precision)); + i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); + i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); + } + return d3_formatPrefixes[8 + i / 3]; + }; + function d3_formatPrefix(d, i) { + var k = Math.pow(10, abs(8 - i) * 3); + return { + scale: i > 8 ? function(d) { + return d / k; + } : function(d) { + return d * k; + }, + symbol: d + }; + } + function d3_locale_numberFormat(locale) { + var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) { + var i = value.length, t = [], j = 0, g = locale_grouping[0]; + while (i > 0 && g > 0) { + t.push(value.substring(i -= g, i + g)); + g = locale_grouping[j = (j + 1) % locale_grouping.length]; + } + return t.reverse().join(locale_thousands); + } : d3_identity; + return function(specifier) { + var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false; + if (precision) precision = +precision.substring(1); + if (zfill || fill === "0" && align === "=") { + zfill = fill = "0"; + align = "="; + if (comma) width -= Math.floor((width - 1) / 4); + } + switch (type) { + case "n": + comma = true; + type = "g"; + break; + + case "%": + scale = 100; + suffix = "%"; + type = "f"; + break; + + case "p": + scale = 100; + suffix = "%"; + type = "r"; + break; + + case "b": + case "o": + case "x": + case "X": + if (symbol === "#") prefix = "0" + type.toLowerCase(); + + case "c": + case "d": + integer = true; + precision = 0; + break; + + case "s": + scale = -1; + type = "r"; + break; + } + if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; + if (type == "r" && !precision) type = "g"; + if (precision != null) { + if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision)); + } + type = d3_format_types.get(type) || d3_format_typeDefault; + var zcomma = zfill && comma; + return function(value) { + var fullSuffix = suffix; + if (integer && value % 1) return ""; + var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign; + if (scale < 0) { + var unit = d3.formatPrefix(value, precision); + value = unit.scale(value); + fullSuffix = unit.symbol + suffix; + } else { + value *= scale; + } + value = type(value, precision); + var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1); + if (!zfill && comma) before = formatGroup(before); + var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; + if (zcomma) before = formatGroup(padding + before); + negative += prefix; + value = before + after; + return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix; + }; + }; + } + var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; + var d3_format_types = d3.map({ + b: function(x) { + return x.toString(2); + }, + c: function(x) { + return String.fromCharCode(x); + }, + o: function(x) { + return x.toString(8); + }, + x: function(x) { + return x.toString(16); + }, + X: function(x) { + return x.toString(16).toUpperCase(); + }, + g: function(x, p) { + return x.toPrecision(p); + }, + e: function(x, p) { + return x.toExponential(p); + }, + f: function(x, p) { + return x.toFixed(p); + }, + r: function(x, p) { + return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p)))); + } + }); + function d3_format_typeDefault(x) { + return x + ""; + } + var d3_time = d3.time = {}, d3_date = Date; + function d3_date_utc() { + this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); + } + d3_date_utc.prototype = { + getDate: function() { + return this._.getUTCDate(); + }, + getDay: function() { + return this._.getUTCDay(); + }, + getFullYear: function() { + return this._.getUTCFullYear(); + }, + getHours: function() { + return this._.getUTCHours(); + }, + getMilliseconds: function() { + return this._.getUTCMilliseconds(); + }, + getMinutes: function() { + return this._.getUTCMinutes(); + }, + getMonth: function() { + return this._.getUTCMonth(); + }, + getSeconds: function() { + return this._.getUTCSeconds(); + }, + getTime: function() { + return this._.getTime(); + }, + getTimezoneOffset: function() { + return 0; + }, + valueOf: function() { + return this._.valueOf(); + }, + setDate: function() { + d3_time_prototype.setUTCDate.apply(this._, arguments); + }, + setDay: function() { + d3_time_prototype.setUTCDay.apply(this._, arguments); + }, + setFullYear: function() { + d3_time_prototype.setUTCFullYear.apply(this._, arguments); + }, + setHours: function() { + d3_time_prototype.setUTCHours.apply(this._, arguments); + }, + setMilliseconds: function() { + d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); + }, + setMinutes: function() { + d3_time_prototype.setUTCMinutes.apply(this._, arguments); + }, + setMonth: function() { + d3_time_prototype.setUTCMonth.apply(this._, arguments); + }, + setSeconds: function() { + d3_time_prototype.setUTCSeconds.apply(this._, arguments); + }, + setTime: function() { + d3_time_prototype.setTime.apply(this._, arguments); + } + }; + var d3_time_prototype = Date.prototype; + function d3_time_interval(local, step, number) { + function round(date) { + var d0 = local(date), d1 = offset(d0, 1); + return date - d0 < d1 - date ? d0 : d1; + } + function ceil(date) { + step(date = local(new d3_date(date - 1)), 1); + return date; + } + function offset(date, k) { + step(date = new d3_date(+date), k); + return date; + } + function range(t0, t1, dt) { + var time = ceil(t0), times = []; + if (dt > 1) { + while (time < t1) { + if (!(number(time) % dt)) times.push(new Date(+time)); + step(time, 1); + } + } else { + while (time < t1) times.push(new Date(+time)), step(time, 1); + } + return times; + } + function range_utc(t0, t1, dt) { + try { + d3_date = d3_date_utc; + var utc = new d3_date_utc(); + utc._ = t0; + return range(utc, t1, dt); + } finally { + d3_date = Date; + } + } + local.floor = local; + local.round = round; + local.ceil = ceil; + local.offset = offset; + local.range = range; + var utc = local.utc = d3_time_interval_utc(local); + utc.floor = utc; + utc.round = d3_time_interval_utc(round); + utc.ceil = d3_time_interval_utc(ceil); + utc.offset = d3_time_interval_utc(offset); + utc.range = range_utc; + return local; + } + function d3_time_interval_utc(method) { + return function(date, k) { + try { + d3_date = d3_date_utc; + var utc = new d3_date_utc(); + utc._ = date; + return method(utc, k)._; + } finally { + d3_date = Date; + } + }; + } + d3_time.year = d3_time_interval(function(date) { + date = d3_time.day(date); + date.setMonth(0, 1); + return date; + }, function(date, offset) { + date.setFullYear(date.getFullYear() + offset); + }, function(date) { + return date.getFullYear(); + }); + d3_time.years = d3_time.year.range; + d3_time.years.utc = d3_time.year.utc.range; + d3_time.day = d3_time_interval(function(date) { + var day = new d3_date(2e3, 0); + day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); + return day; + }, function(date, offset) { + date.setDate(date.getDate() + offset); + }, function(date) { + return date.getDate() - 1; + }); + d3_time.days = d3_time.day.range; + d3_time.days.utc = d3_time.day.utc.range; + d3_time.dayOfYear = function(date) { + var year = d3_time.year(date); + return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); + }; + [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { + i = 7 - i; + var interval = d3_time[day] = d3_time_interval(function(date) { + (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); + return date; + }, function(date, offset) { + date.setDate(date.getDate() + Math.floor(offset) * 7); + }, function(date) { + var day = d3_time.year(date).getDay(); + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); + }); + d3_time[day + "s"] = interval.range; + d3_time[day + "s"].utc = interval.utc.range; + d3_time[day + "OfYear"] = function(date) { + var day = d3_time.year(date).getDay(); + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); + }; + }); + d3_time.week = d3_time.sunday; + d3_time.weeks = d3_time.sunday.range; + d3_time.weeks.utc = d3_time.sunday.utc.range; + d3_time.weekOfYear = d3_time.sundayOfYear; + function d3_locale_timeFormat(locale) { + var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; + function d3_time_format(template) { + var n = template.length; + function format(date) { + var string = [], i = -1, j = 0, c, p, f; + while (++i < n) { + if (template.charCodeAt(i) === 37) { + string.push(template.substring(j, i)); + if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); + if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); + string.push(c); + j = i + 1; + } + } + string.push(template.substring(j, i)); + return string.join(""); + } + format.parse = function(string) { + var d = { + y: 1900, + m: 0, + d: 1, + H: 0, + M: 0, + S: 0, + L: 0, + Z: null + }, i = d3_time_parse(d, template, string, 0); + if (i != string.length) return null; + if ("p" in d) d.H = d.H % 12 + d.p * 12; + var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); + if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) { + date.setFullYear(d.y, 0, 1); + date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7); + } else date.setFullYear(d.y, d.m, d.d); + date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L); + return localZ ? date._ : date; + }; + format.toString = function() { + return template; + }; + return format; + } + function d3_time_parse(date, template, string, j) { + var c, p, t, i = 0, n = template.length, m = string.length; + while (i < n) { + if (j >= m) return -1; + c = template.charCodeAt(i++); + if (c === 37) { + t = template.charAt(i++); + p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; + if (!p || (j = p(date, string, j)) < 0) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + return j; + } + d3_time_format.utc = function(template) { + var local = d3_time_format(template); + function format(date) { + try { + d3_date = d3_date_utc; + var utc = new d3_date(); + utc._ = date; + return local(utc); + } finally { + d3_date = Date; + } + } + format.parse = function(string) { + try { + d3_date = d3_date_utc; + var date = local.parse(string); + return date && date._; + } finally { + d3_date = Date; + } + }; + format.toString = local.toString; + return format; + }; + d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; + var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths); + locale_periods.forEach(function(p, i) { + d3_time_periodLookup.set(p.toLowerCase(), i); + }); + var d3_time_formats = { + a: function(d) { + return locale_shortDays[d.getDay()]; + }, + A: function(d) { + return locale_days[d.getDay()]; + }, + b: function(d) { + return locale_shortMonths[d.getMonth()]; + }, + B: function(d) { + return locale_months[d.getMonth()]; + }, + c: d3_time_format(locale_dateTime), + d: function(d, p) { + return d3_time_formatPad(d.getDate(), p, 2); + }, + e: function(d, p) { + return d3_time_formatPad(d.getDate(), p, 2); + }, + H: function(d, p) { + return d3_time_formatPad(d.getHours(), p, 2); + }, + I: function(d, p) { + return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); + }, + j: function(d, p) { + return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); + }, + L: function(d, p) { + return d3_time_formatPad(d.getMilliseconds(), p, 3); + }, + m: function(d, p) { + return d3_time_formatPad(d.getMonth() + 1, p, 2); + }, + M: function(d, p) { + return d3_time_formatPad(d.getMinutes(), p, 2); + }, + p: function(d) { + return locale_periods[+(d.getHours() >= 12)]; + }, + S: function(d, p) { + return d3_time_formatPad(d.getSeconds(), p, 2); + }, + U: function(d, p) { + return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); + }, + w: function(d) { + return d.getDay(); + }, + W: function(d, p) { + return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); + }, + x: d3_time_format(locale_date), + X: d3_time_format(locale_time), + y: function(d, p) { + return d3_time_formatPad(d.getFullYear() % 100, p, 2); + }, + Y: function(d, p) { + return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); + }, + Z: d3_time_zone, + "%": function() { + return "%"; + } + }; + var d3_time_parsers = { + a: d3_time_parseWeekdayAbbrev, + A: d3_time_parseWeekday, + b: d3_time_parseMonthAbbrev, + B: d3_time_parseMonth, + c: d3_time_parseLocaleFull, + d: d3_time_parseDay, + e: d3_time_parseDay, + H: d3_time_parseHour24, + I: d3_time_parseHour24, + j: d3_time_parseDayOfYear, + L: d3_time_parseMilliseconds, + m: d3_time_parseMonthNumber, + M: d3_time_parseMinutes, + p: d3_time_parseAmPm, + S: d3_time_parseSeconds, + U: d3_time_parseWeekNumberSunday, + w: d3_time_parseWeekdayNumber, + W: d3_time_parseWeekNumberMonday, + x: d3_time_parseLocaleDate, + X: d3_time_parseLocaleTime, + y: d3_time_parseYear, + Y: d3_time_parseFullYear, + Z: d3_time_parseZone, + "%": d3_time_parseLiteralPercent + }; + function d3_time_parseWeekdayAbbrev(date, string, i) { + d3_time_dayAbbrevRe.lastIndex = 0; + var n = d3_time_dayAbbrevRe.exec(string.substring(i)); + return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseWeekday(date, string, i) { + d3_time_dayRe.lastIndex = 0; + var n = d3_time_dayRe.exec(string.substring(i)); + return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseMonthAbbrev(date, string, i) { + d3_time_monthAbbrevRe.lastIndex = 0; + var n = d3_time_monthAbbrevRe.exec(string.substring(i)); + return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseMonth(date, string, i) { + d3_time_monthRe.lastIndex = 0; + var n = d3_time_monthRe.exec(string.substring(i)); + return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseLocaleFull(date, string, i) { + return d3_time_parse(date, d3_time_formats.c.toString(), string, i); + } + function d3_time_parseLocaleDate(date, string, i) { + return d3_time_parse(date, d3_time_formats.x.toString(), string, i); + } + function d3_time_parseLocaleTime(date, string, i) { + return d3_time_parse(date, d3_time_formats.X.toString(), string, i); + } + function d3_time_parseAmPm(date, string, i) { + var n = d3_time_periodLookup.get(string.substring(i, i += 2).toLowerCase()); + return n == null ? -1 : (date.p = n, i); + } + return d3_time_format; + } + var d3_time_formatPads = { + "-": "", + _: " ", + "0": "0" + }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; + function d3_time_formatPad(value, fill, width) { + var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); + } + function d3_time_formatRe(names) { + return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); + } + function d3_time_formatLookup(names) { + var map = new d3_Map(), i = -1, n = names.length; + while (++i < n) map.set(names[i].toLowerCase(), i); + return map; + } + function d3_time_parseWeekdayNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 1)); + return n ? (date.w = +n[0], i + n[0].length) : -1; + } + function d3_time_parseWeekNumberSunday(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i)); + return n ? (date.U = +n[0], i + n[0].length) : -1; + } + function d3_time_parseWeekNumberMonday(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i)); + return n ? (date.W = +n[0], i + n[0].length) : -1; + } + function d3_time_parseFullYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 4)); + return n ? (date.y = +n[0], i + n[0].length) : -1; + } + function d3_time_parseYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; + } + function d3_time_parseZone(date, string, i) { + return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = -string, + i + 5) : -1; + } + function d3_time_expandYear(d) { + return d + (d > 68 ? 1900 : 2e3); + } + function d3_time_parseMonthNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.m = n[0] - 1, i + n[0].length) : -1; + } + function d3_time_parseDay(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.d = +n[0], i + n[0].length) : -1; + } + function d3_time_parseDayOfYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 3)); + return n ? (date.j = +n[0], i + n[0].length) : -1; + } + function d3_time_parseHour24(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.H = +n[0], i + n[0].length) : -1; + } + function d3_time_parseMinutes(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.M = +n[0], i + n[0].length) : -1; + } + function d3_time_parseSeconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.S = +n[0], i + n[0].length) : -1; + } + function d3_time_parseMilliseconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 3)); + return n ? (date.L = +n[0], i + n[0].length) : -1; + } + function d3_time_zone(d) { + var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(abs(z) / 60), zm = abs(z) % 60; + return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); + } + function d3_time_parseLiteralPercent(date, string, i) { + d3_time_percentRe.lastIndex = 0; + var n = d3_time_percentRe.exec(string.substring(i, i + 1)); + return n ? i + n[0].length : -1; + } + function d3_time_formatMulti(formats) { + var n = formats.length, i = -1; + while (++i < n) formats[i][0] = this(formats[i][0]); + return function(date) { + var i = 0, f = formats[i]; + while (!f[1](date)) f = formats[++i]; + return f[0](date); + }; + } + d3.locale = function(locale) { + return { + numberFormat: d3_locale_numberFormat(locale), + timeFormat: d3_locale_timeFormat(locale) + }; + }; + var d3_locale_enUS = d3.locale({ + decimal: ".", + thousands: ",", + grouping: [ 3 ], + currency: [ "$", "" ], + dateTime: "%a %b %e %X %Y", + date: "%m/%d/%Y", + time: "%H:%M:%S", + periods: [ "AM", "PM" ], + days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], + shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] + }); + d3.format = d3_locale_enUS.numberFormat; + d3.geo = {}; + function d3_adder() {} + d3_adder.prototype = { + s: 0, + t: 0, + add: function(y) { + d3_adderSum(y, this.t, d3_adderTemp); + d3_adderSum(d3_adderTemp.s, this.s, this); + if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; + }, + reset: function() { + this.s = this.t = 0; + }, + valueOf: function() { + return this.s; + } + }; + var d3_adderTemp = new d3_adder(); + function d3_adderSum(a, b, o) { + var x = o.s = a + b, bv = x - a, av = x - bv; + o.t = a - av + (b - bv); + } + d3.geo.stream = function(object, listener) { + if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { + d3_geo_streamObjectType[object.type](object, listener); + } else { + d3_geo_streamGeometry(object, listener); + } + }; + function d3_geo_streamGeometry(geometry, listener) { + if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { + d3_geo_streamGeometryType[geometry.type](geometry, listener); + } + } + var d3_geo_streamObjectType = { + Feature: function(feature, listener) { + d3_geo_streamGeometry(feature.geometry, listener); + }, + FeatureCollection: function(object, listener) { + var features = object.features, i = -1, n = features.length; + while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); + } + }; + var d3_geo_streamGeometryType = { + Sphere: function(object, listener) { + listener.sphere(); + }, + Point: function(object, listener) { + object = object.coordinates; + listener.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); + }, + LineString: function(object, listener) { + d3_geo_streamLine(object.coordinates, listener, 0); + }, + MultiLineString: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); + }, + Polygon: function(object, listener) { + d3_geo_streamPolygon(object.coordinates, listener); + }, + MultiPolygon: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); + }, + GeometryCollection: function(object, listener) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) d3_geo_streamGeometry(geometries[i], listener); + } + }; + function d3_geo_streamLine(coordinates, listener, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + listener.lineStart(); + while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); + listener.lineEnd(); + } + function d3_geo_streamPolygon(coordinates, listener) { + var i = -1, n = coordinates.length; + listener.polygonStart(); + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); + listener.polygonEnd(); + } + d3.geo.area = function(object) { + d3_geo_areaSum = 0; + d3.geo.stream(object, d3_geo_area); + return d3_geo_areaSum; + }; + var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); + var d3_geo_area = { + sphere: function() { + d3_geo_areaSum += 4 * π; + }, + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function() { + d3_geo_areaRingSum.reset(); + d3_geo_area.lineStart = d3_geo_areaRingStart; + }, + polygonEnd: function() { + var area = 2 * d3_geo_areaRingSum; + d3_geo_areaSum += area < 0 ? 4 * π + area : area; + d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; + } + }; + function d3_geo_areaRingStart() { + var λ00, φ00, λ0, cosφ0, sinφ0; + d3_geo_area.point = function(λ, φ) { + d3_geo_area.point = nextPoint; + λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), + sinφ0 = Math.sin(φ); + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + φ = φ * d3_radians / 2 + π / 4; + var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ); + d3_geo_areaRingSum.add(Math.atan2(v, u)); + λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; + } + d3_geo_area.lineEnd = function() { + nextPoint(λ00, φ00); + }; + } + function d3_geo_cartesian(spherical) { + var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); + return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; + } + function d3_geo_cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + } + function d3_geo_cartesianCross(a, b) { + return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ]; + } + function d3_geo_cartesianAdd(a, b) { + a[0] += b[0]; + a[1] += b[1]; + a[2] += b[2]; + } + function d3_geo_cartesianScale(vector, k) { + return [ vector[0] * k, vector[1] * k, vector[2] * k ]; + } + function d3_geo_cartesianNormalize(d) { + var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l; + d[1] /= l; + d[2] /= l; + } + function d3_geo_spherical(cartesian) { + return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; + } + function d3_geo_sphericalEqual(a, b) { + return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; + } + d3.geo.bounds = function() { + var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; + var bound = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + bound.point = ringPoint; + bound.lineStart = ringStart; + bound.lineEnd = ringEnd; + dλSum = 0; + d3_geo_area.polygonStart(); + }, + polygonEnd: function() { + d3_geo_area.polygonEnd(); + bound.point = point; + bound.lineStart = lineStart; + bound.lineEnd = lineEnd; + if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; + range[0] = λ0, range[1] = λ1; + } + }; + function point(λ, φ) { + ranges.push(range = [ λ0 = λ, λ1 = λ ]); + if (φ < φ0) φ0 = φ; + if (φ > φ1) φ1 = φ; + } + function linePoint(λ, φ) { + var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); + if (p0) { + var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); + d3_geo_cartesianNormalize(inflection); + inflection = d3_geo_spherical(inflection); + var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; + if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = inflection[1] * d3_degrees; + if (φi > φ1) φ1 = φi; + } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = -inflection[1] * d3_degrees; + if (φi < φ0) φ0 = φi; + } else { + if (φ < φ0) φ0 = φ; + if (φ > φ1) φ1 = φ; + } + if (antimeridian) { + if (λ < λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + } + } else { + if (λ1 >= λ0) { + if (λ < λ0) λ0 = λ; + if (λ > λ1) λ1 = λ; + } else { + if (λ > λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + } + } + } + } else { + point(λ, φ); + } + p0 = p, λ_ = λ; + } + function lineStart() { + bound.point = linePoint; + } + function lineEnd() { + range[0] = λ0, range[1] = λ1; + bound.point = point; + p0 = null; + } + function ringPoint(λ, φ) { + if (p0) { + var dλ = λ - λ_; + dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; + } else λ__ = λ, φ__ = φ; + d3_geo_area.point(λ, φ); + linePoint(λ, φ); + } + function ringStart() { + d3_geo_area.lineStart(); + } + function ringEnd() { + ringPoint(λ__, φ__); + d3_geo_area.lineEnd(); + if (abs(dλSum) > ε) λ0 = -(λ1 = 180); + range[0] = λ0, range[1] = λ1; + p0 = null; + } + function angle(λ0, λ1) { + return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; + } + function compareRanges(a, b) { + return a[0] - b[0]; + } + function withinRange(x, range) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; + } + return function(feature) { + φ1 = λ1 = -(λ0 = φ0 = Infinity); + ranges = []; + d3.geo.stream(feature, bound); + var n = ranges.length; + if (n) { + ranges.sort(compareRanges); + for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { + b = ranges[i]; + if (withinRange(b[0], a) || withinRange(b[1], a)) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + var best = -Infinity, dλ; + for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { + b = merged[i]; + if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; + } + } + ranges = range = null; + return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; + }; + }(); + d3.geo.centroid = function(object) { + d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; + d3.geo.stream(object, d3_geo_centroid); + var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; + if (m < ε2) { + x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; + if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; + m = x * x + y * y + z * z; + if (m < ε2) return [ NaN, NaN ]; + } + return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; + }; + var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2; + var d3_geo_centroid = { + sphere: d3_noop, + point: d3_geo_centroidPoint, + lineStart: d3_geo_centroidLineStart, + lineEnd: d3_geo_centroidLineEnd, + polygonStart: function() { + d3_geo_centroid.lineStart = d3_geo_centroidRingStart; + }, + polygonEnd: function() { + d3_geo_centroid.lineStart = d3_geo_centroidLineStart; + } + }; + function d3_geo_centroidPoint(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); + } + function d3_geo_centroidPointXYZ(x, y, z) { + ++d3_geo_centroidW0; + d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; + d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; + d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; + } + function d3_geo_centroidLineStart() { + var x0, y0, z0; + d3_geo_centroid.point = function(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + x0 = cosφ * Math.cos(λ); + y0 = cosφ * Math.sin(λ); + z0 = Math.sin(φ); + d3_geo_centroid.point = nextPoint; + d3_geo_centroidPointXYZ(x0, y0, z0); + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); + d3_geo_centroidW1 += w; + d3_geo_centroidX1 += w * (x0 + (x0 = x)); + d3_geo_centroidY1 += w * (y0 + (y0 = y)); + d3_geo_centroidZ1 += w * (z0 + (z0 = z)); + d3_geo_centroidPointXYZ(x0, y0, z0); + } + } + function d3_geo_centroidLineEnd() { + d3_geo_centroid.point = d3_geo_centroidPoint; + } + function d3_geo_centroidRingStart() { + var λ00, φ00, x0, y0, z0; + d3_geo_centroid.point = function(λ, φ) { + λ00 = λ, φ00 = φ; + d3_geo_centroid.point = nextPoint; + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + x0 = cosφ * Math.cos(λ); + y0 = cosφ * Math.sin(λ); + z0 = Math.sin(φ); + d3_geo_centroidPointXYZ(x0, y0, z0); + }; + d3_geo_centroid.lineEnd = function() { + nextPoint(λ00, φ00); + d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; + d3_geo_centroid.point = d3_geo_centroidPoint; + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u); + d3_geo_centroidX2 += v * cx; + d3_geo_centroidY2 += v * cy; + d3_geo_centroidZ2 += v * cz; + d3_geo_centroidW1 += w; + d3_geo_centroidX1 += w * (x0 + (x0 = x)); + d3_geo_centroidY1 += w * (y0 + (y0 = y)); + d3_geo_centroidZ1 += w * (z0 + (z0 = z)); + d3_geo_centroidPointXYZ(x0, y0, z0); + } + } + function d3_true() { + return true; + } + function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { + var subject = [], clip = []; + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n]; + if (d3_geo_sphericalEqual(p0, p1)) { + listener.lineStart(); + for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); + listener.lineEnd(); + return; + } + var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); + a.o = b; + subject.push(a); + clip.push(b); + a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); + b = new d3_geo_clipPolygonIntersection(p1, null, a, true); + a.o = b; + subject.push(a); + clip.push(b); + }); + clip.sort(compare); + d3_geo_clipPolygonLinkCircular(subject); + d3_geo_clipPolygonLinkCircular(clip); + if (!subject.length) return; + for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { + clip[i].e = entry = !entry; + } + var start = subject[0], points, point; + while (1) { + var current = start, isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + listener.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, listener); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, listener); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + listener.lineEnd(); + } + } + function d3_geo_clipPolygonLinkCircular(array) { + if (!(n = array.length)) return; + var n, i = 0, a = array[0], b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; + } + function d3_geo_clipPolygonIntersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; + this.e = entry; + this.v = false; + this.n = this.p = null; + } + function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { + return function(rotate, listener) { + var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = d3.merge(segments); + var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); + if (segments.length) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); + } else if (clipStartInside) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + } + if (polygonStarted) listener.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + listener.polygonStart(); + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + listener.polygonEnd(); + } + }; + function point(λ, φ) { + var point = rotate(λ, φ); + if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); + } + function pointLine(λ, φ) { + var point = rotate(λ, φ); + line.point(point[0], point[1]); + } + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + var segments; + var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; + function pointRing(λ, φ) { + ring.push([ λ, φ ]); + var point = rotate(λ, φ); + ringListener.point(point[0], point[1]); + } + function ringStart() { + ringListener.lineStart(); + ring = []; + } + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringListener.lineEnd(); + var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; + ring.pop(); + polygon.push(ring); + ring = null; + if (!n) return; + if (clean & 1) { + segment = ringSegments[0]; + var n = segment.length - 1, i = -1, point; + if (n > 0) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + listener.lineStart(); + while (++i < n) listener.point((point = segment[i])[0], point[1]); + listener.lineEnd(); + } + return; + } + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); + } + return clip; + }; + } + function d3_geo_clipSegmentLength1(segment) { + return segment.length > 1; + } + function d3_geo_clipBufferListener() { + var lines = [], line; + return { + lineStart: function() { + lines.push(line = []); + }, + point: function(λ, φ) { + line.push([ λ, φ ]); + }, + lineEnd: d3_noop, + buffer: function() { + var buffer = lines; + lines = []; + line = null; + return buffer; + }, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + } + }; + } + function d3_geo_clipSort(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); + } + function d3_geo_pointInPolygon(point, polygon) { + var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; + d3_geo_areaRingSum.reset(); + for (var i = 0, n = polygon.length; i < n; ++i) { + var ring = polygon[i], m = ring.length; + if (!m) continue; + var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; + while (true) { + if (j === m) j = 0; + point = ring[j]; + var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ; + d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); + polarAngle += antimeridian ? dλ + sdλ * τ : dλ; + if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { + var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); + d3_geo_cartesianNormalize(arc); + var intersection = d3_geo_cartesianCross(meridianNormal, arc); + d3_geo_cartesianNormalize(intersection); + var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); + if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { + winding += antimeridian ^ dλ >= 0 ? 1 : -1; + } + } + if (!j++) break; + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; + } + } + return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1; + } + var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); + function d3_geo_clipAntimeridianLine(listener) { + var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; + return { + lineStart: function() { + listener.lineStart(); + clean = 1; + }, + point: function(λ1, φ1) { + var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); + if (abs(dλ - π) < ε) { + listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + listener.point(λ1, φ0); + clean = 0; + } else if (sλ0 !== sλ1 && dλ >= π) { + if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; + if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; + φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + clean = 0; + } + listener.point(λ0 = λ1, φ0 = φ1); + sλ0 = sλ1; + }, + lineEnd: function() { + listener.lineEnd(); + λ0 = φ0 = NaN; + }, + clean: function() { + return 2 - clean; + } + }; + } + function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { + var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); + return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2; + } + function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { + var φ; + if (from == null) { + φ = direction * halfπ; + listener.point(-π, φ); + listener.point(0, φ); + listener.point(π, φ); + listener.point(π, 0); + listener.point(π, -φ); + listener.point(0, -φ); + listener.point(-π, -φ); + listener.point(-π, 0); + listener.point(-π, φ); + } else if (abs(from[0] - to[0]) > ε) { + var s = from[0] < to[0] ? π : -π; + φ = direction * s / 2; + listener.point(-s, φ); + listener.point(0, φ); + listener.point(s, φ); + } else { + listener.point(to[0], to[1]); + } + } + function d3_geo_clipCircle(radius) { + var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); + return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); + function visible(λ, φ) { + return Math.cos(λ) * Math.cos(φ) > cr; + } + function clipLine(listener) { + var point0, c0, v0, v00, clean; + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(λ, φ) { + var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; + if (!point0 && (v00 = v0 = v)) listener.lineStart(); + if (v !== v0) { + point2 = intersect(point0, point1); + if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { + point1[0] += ε; + point1[1] += ε; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + listener.lineStart(); + point2 = intersect(point1, point0); + listener.point(point2[0], point2[1]); + } else { + point2 = intersect(point0, point1); + listener.point(point2[0], point2[1]); + listener.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + listener.lineStart(); + listener.point(t[0][0], t[0][1]); + listener.point(t[1][0], t[1][1]); + listener.lineEnd(); + } else { + listener.point(t[1][0], t[1][1]); + listener.lineEnd(); + listener.lineStart(); + listener.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { + listener.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) listener.lineEnd(); + point0 = null; + }, + clean: function() { + return clean | (v00 && v0) << 1; + } + }; + } + function intersect(a, b, two) { + var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); + var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; + if (!determinant) return !two && a; + var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2); + d3_geo_cartesianAdd(A, B); + var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1); + if (t2 < 0) return; + var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); + d3_geo_cartesianAdd(q, A); + q = d3_geo_spherical(q); + if (!two) return q; + var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; + if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; + var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; + if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; + if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) { + var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); + d3_geo_cartesianAdd(q1, A); + return [ q, d3_geo_spherical(q1) ]; + } + } + function code(λ, φ) { + var r = smallRadius ? radius : π - radius, code = 0; + if (λ < -r) code |= 1; else if (λ > r) code |= 2; + if (φ < -r) code |= 4; else if (φ > r) code |= 8; + return code; + } + } + function d3_geom_clipLine(x0, y0, x1, y1) { + return function(line) { + var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + if (t0 > 0) line.a = { + x: ax + t0 * dx, + y: ay + t0 * dy + }; + if (t1 < 1) line.b = { + x: ax + t1 * dx, + y: ay + t1 * dy + }; + return line; + }; + } + var d3_geo_clipExtentMAX = 1e9; + d3.geo.clipExtent = function() { + var x0, y0, x1, y1, stream, clip, clipExtent = { + stream: function(output) { + if (stream) stream.valid = false; + stream = clip(output); + stream.valid = true; + return stream; + }, + extent: function(_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; + clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); + if (stream) stream.valid = false, stream = null; + return clipExtent; + } + }; + return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); + }; + function d3_geo_clipExtent(x0, y0, x1, y1) { + return function(listener) { + var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + listener = bufferListener; + segments = []; + polygon = []; + clean = true; + }, + polygonEnd: function() { + listener = listener_; + segments = d3.merge(segments); + var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; + if (inside || visible) { + listener.polygonStart(); + if (inside) { + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + } + if (visible) { + d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); + } + listener.polygonEnd(); + } + segments = polygon = ring = null; + } + }; + function insidePolygon(p) { + var wn = 0, n = polygon.length, y = p[1]; + for (var i = 0; i < n; ++i) { + for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { + b = v[j]; + if (a[1] <= y) { + if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; + } else { + if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; + } + a = b; + } + } + return wn !== 0; + } + function interpolate(from, to, direction, listener) { + var a = 0, a1 = 0; + if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { + do { + listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + } while ((a = (a + direction + 4) % 4) !== a1); + } else { + listener.point(to[0], to[1]); + } + } + function pointVisible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + function point(x, y) { + if (pointVisible(x, y)) listener.point(x, y); + } + var x__, y__, v__, x_, y_, v_, first, clean; + function lineStart() { + clip.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferListener.rejoin(); + segments.push(bufferListener.buffer()); + } + clip.point = point; + if (v_) listener.lineEnd(); + } + function linePoint(x, y) { + x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); + y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); + var v = pointVisible(x, y); + if (polygon) ring.push([ x, y ]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + listener.lineStart(); + listener.point(x, y); + } + } else { + if (v && v_) listener.point(x, y); else { + var l = { + a: { + x: x_, + y: y_ + }, + b: { + x: x, + y: y + } + }; + if (clipLine(l)) { + if (!v_) { + listener.lineStart(); + listener.point(l.a.x, l.a.y); + } + listener.point(l.b.x, l.b.y); + if (!v) listener.lineEnd(); + clean = false; + } else if (v) { + listener.lineStart(); + listener.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + return clip; + }; + function corner(p, direction) { + return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; + } + function compare(a, b) { + return comparePoints(a.x, b.x); + } + function comparePoints(a, b) { + var ca = corner(a, 1), cb = corner(b, 1); + return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; + } + } + function d3_geo_compose(a, b) { + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + return compose; + } + function d3_geo_conic(projectAt) { + var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); + p.parallels = function(_) { + if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; + return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); + }; + return p; + } + function d3_geo_conicEqualArea(φ0, φ1) { + var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n; + function forward(λ, φ) { + var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; + return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = ρ0 - y; + return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; + }; + return forward; + } + (d3.geo.conicEqualArea = function() { + return d3_geo_conic(d3_geo_conicEqualArea); + }).raw = d3_geo_conicEqualArea; + d3.geo.albers = function() { + return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); + }; + d3.geo.albersUsa = function() { + var lower48 = d3.geo.albers(); + var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); + var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); + var point, pointStream = { + point: function(x, y) { + point = [ x, y ]; + } + }, lower48Point, alaskaPoint, hawaiiPoint; + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + point = null; + (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); + return point; + } + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; + return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); + }; + albersUsa.stream = function(stream) { + var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); + return { + point: function(x, y) { + lower48Stream.point(x, y); + alaskaStream.point(x, y); + hawaiiStream.point(x, y); + }, + sphere: function() { + lower48Stream.sphere(); + alaskaStream.sphere(); + hawaiiStream.sphere(); + }, + lineStart: function() { + lower48Stream.lineStart(); + alaskaStream.lineStart(); + hawaiiStream.lineStart(); + }, + lineEnd: function() { + lower48Stream.lineEnd(); + alaskaStream.lineEnd(); + hawaiiStream.lineEnd(); + }, + polygonStart: function() { + lower48Stream.polygonStart(); + alaskaStream.polygonStart(); + hawaiiStream.polygonStart(); + }, + polygonEnd: function() { + lower48Stream.polygonEnd(); + alaskaStream.polygonEnd(); + hawaiiStream.polygonEnd(); + } + }; + }; + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_); + alaska.precision(_); + hawaii.precision(_); + return albersUsa; + }; + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_); + alaska.scale(_ * .35); + hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; + alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; + hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point; + return albersUsa; + }; + return albersUsa.scale(1070); + }; + var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function() { + d3_geo_pathAreaPolygon = 0; + d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; + }, + polygonEnd: function() { + d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; + d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); + } + }; + function d3_geo_pathAreaRingStart() { + var x00, y00, x0, y0; + d3_geo_pathArea.point = function(x, y) { + d3_geo_pathArea.point = nextPoint; + x00 = x0 = x, y00 = y0 = y; + }; + function nextPoint(x, y) { + d3_geo_pathAreaPolygon += y0 * x - x0 * y; + x0 = x, y0 = y; + } + d3_geo_pathArea.lineEnd = function() { + nextPoint(x00, y00); + }; + } + var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; + var d3_geo_pathBounds = { + point: d3_geo_pathBoundsPoint, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + }; + function d3_geo_pathBoundsPoint(x, y) { + if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; + if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; + if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; + if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; + } + function d3_geo_pathBuffer() { + var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; + var stream = { + point: point, + lineStart: function() { + stream.point = pointLineStart; + }, + lineEnd: lineEnd, + polygonStart: function() { + stream.lineEnd = lineEndPolygon; + }, + polygonEnd: function() { + stream.lineEnd = lineEnd; + stream.point = point; + }, + pointRadius: function(_) { + pointCircle = d3_geo_pathBufferCircle(_); + return stream; + }, + result: function() { + if (buffer.length) { + var result = buffer.join(""); + buffer = []; + return result; + } + } + }; + function point(x, y) { + buffer.push("M", x, ",", y, pointCircle); + } + function pointLineStart(x, y) { + buffer.push("M", x, ",", y); + stream.point = pointLine; + } + function pointLine(x, y) { + buffer.push("L", x, ",", y); + } + function lineEnd() { + stream.point = point; + } + function lineEndPolygon() { + buffer.push("Z"); + } + return stream; + } + function d3_geo_pathBufferCircle(radius) { + return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; + } + var d3_geo_pathCentroid = { + point: d3_geo_pathCentroidPoint, + lineStart: d3_geo_pathCentroidLineStart, + lineEnd: d3_geo_pathCentroidLineEnd, + polygonStart: function() { + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; + }, + polygonEnd: function() { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; + d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; + } + }; + function d3_geo_pathCentroidPoint(x, y) { + d3_geo_centroidX0 += x; + d3_geo_centroidY0 += y; + ++d3_geo_centroidZ0; + } + function d3_geo_pathCentroidLineStart() { + var x0, y0; + d3_geo_pathCentroid.point = function(x, y) { + d3_geo_pathCentroid.point = nextPoint; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + }; + function nextPoint(x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); + d3_geo_centroidX1 += z * (x0 + x) / 2; + d3_geo_centroidY1 += z * (y0 + y) / 2; + d3_geo_centroidZ1 += z; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + } + } + function d3_geo_pathCentroidLineEnd() { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; + } + function d3_geo_pathCentroidRingStart() { + var x00, y00, x0, y0; + d3_geo_pathCentroid.point = function(x, y) { + d3_geo_pathCentroid.point = nextPoint; + d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); + }; + function nextPoint(x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); + d3_geo_centroidX1 += z * (x0 + x) / 2; + d3_geo_centroidY1 += z * (y0 + y) / 2; + d3_geo_centroidZ1 += z; + z = y0 * x - x0 * y; + d3_geo_centroidX2 += z * (x0 + x); + d3_geo_centroidY2 += z * (y0 + y); + d3_geo_centroidZ2 += z * 3; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + } + d3_geo_pathCentroid.lineEnd = function() { + nextPoint(x00, y00); + }; + } + function d3_geo_pathContext(context) { + var pointRadius = 4.5; + var stream = { + point: point, + lineStart: function() { + stream.point = pointLineStart; + }, + lineEnd: lineEnd, + polygonStart: function() { + stream.lineEnd = lineEndPolygon; + }, + polygonEnd: function() { + stream.lineEnd = lineEnd; + stream.point = point; + }, + pointRadius: function(_) { + pointRadius = _; + return stream; + }, + result: d3_noop + }; + function point(x, y) { + context.moveTo(x, y); + context.arc(x, y, pointRadius, 0, τ); + } + function pointLineStart(x, y) { + context.moveTo(x, y); + stream.point = pointLine; + } + function pointLine(x, y) { + context.lineTo(x, y); + } + function lineEnd() { + stream.point = point; + } + function lineEndPolygon() { + context.closePath(); + } + return stream; + } + function d3_geo_resample(project) { + var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; + function resample(stream) { + return (maxDepth ? resampleRecursive : resampleNone)(stream); + } + function resampleNone(stream) { + return d3_geo_transformPoint(stream, function(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + }); + } + function resampleRecursive(stream) { + var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; + var resample = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + stream.polygonStart(); + resample.lineStart = ringStart; + }, + polygonEnd: function() { + stream.polygonEnd(); + resample.lineStart = lineStart; + } + }; + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + function lineStart() { + x0 = NaN; + resample.point = linePoint; + stream.lineStart(); + } + function linePoint(λ, φ) { + var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); + resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } + function lineEnd() { + resample.point = point; + stream.lineEnd(); + } + function ringStart() { + lineStart(); + resample.point = ringPoint; + resample.lineEnd = ringEnd; + } + function ringPoint(λ, φ) { + linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resample.point = linePoint; + } + function ringEnd() { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); + resample.lineEnd = lineEnd; + lineEnd(); + } + return resample; + } + function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; + if (d2 > 4 * δ2 && depth--) { + var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); + } + } + } + resample.precision = function(_) { + if (!arguments.length) return Math.sqrt(δ2); + maxDepth = (δ2 = _ * _) > 0 && 16; + return resample; + }; + return resample; + } + d3.geo.path = function() { + var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); + d3.geo.stream(object, cacheStream); + } + return contextStream.result(); + } + path.area = function(object) { + d3_geo_pathAreaSum = 0; + d3.geo.stream(object, projectStream(d3_geo_pathArea)); + return d3_geo_pathAreaSum; + }; + path.centroid = function(object) { + d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0; + d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); + return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ]; + }; + path.bounds = function(object) { + d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); + d3.geo.stream(object, projectStream(d3_geo_pathBounds)); + return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; + }; + path.projection = function(_) { + if (!arguments.length) return projection; + projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; + return reset(); + }; + path.context = function(_) { + if (!arguments.length) return context; + contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return reset(); + }; + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + function reset() { + cacheStream = null; + return path; + } + return path.projection(d3.geo.albersUsa()).context(null); + }; + function d3_geo_pathProjectStream(project) { + var resample = d3_geo_resample(function(x, y) { + return project([ x * d3_degrees, y * d3_degrees ]); + }); + return function(stream) { + return d3_geo_projectionRadians(resample(stream)); + }; + } + d3.geo.transform = function(methods) { + return { + stream: function(stream) { + var transform = new d3_geo_transform(stream); + for (var k in methods) transform[k] = methods[k]; + return transform; + } + }; + }; + function d3_geo_transform(stream) { + this.stream = stream; + } + d3_geo_transform.prototype = { + point: function(x, y) { + this.stream.point(x, y); + }, + sphere: function() { + this.stream.sphere(); + }, + lineStart: function() { + this.stream.lineStart(); + }, + lineEnd: function() { + this.stream.lineEnd(); + }, + polygonStart: function() { + this.stream.polygonStart(); + }, + polygonEnd: function() { + this.stream.polygonEnd(); + } + }; + function d3_geo_transformPoint(stream, point) { + return { + point: point, + sphere: function() { + stream.sphere(); + }, + lineStart: function() { + stream.lineStart(); + }, + lineEnd: function() { + stream.lineEnd(); + }, + polygonStart: function() { + stream.polygonStart(); + }, + polygonEnd: function() { + stream.polygonEnd(); + } + }; + } + d3.geo.projection = d3_geo_projection; + d3.geo.projectionMutator = d3_geo_projectionMutator; + function d3_geo_projection(project) { + return d3_geo_projectionMutator(function() { + return project; + })(); + } + function d3_geo_projectionMutator(projectAt) { + var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { + x = project(x, y); + return [ x[0] * k + δx, δy - x[1] * k ]; + }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream; + function projection(point) { + point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); + return [ point[0] * k + δx, δy - point[1] * k ]; + } + function invert(point) { + point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); + return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; + } + projection.stream = function(output) { + if (stream) stream.valid = false; + stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); + stream.valid = true; + return stream; + }; + projection.clipAngle = function(_) { + if (!arguments.length) return clipAngle; + preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); + return invalidate(); + }; + projection.clipExtent = function(_) { + if (!arguments.length) return clipExtent; + clipExtent = _; + postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; + return invalidate(); + }; + projection.scale = function(_) { + if (!arguments.length) return k; + k = +_; + return reset(); + }; + projection.translate = function(_) { + if (!arguments.length) return [ x, y ]; + x = +_[0]; + y = +_[1]; + return reset(); + }; + projection.center = function(_) { + if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; + λ = _[0] % 360 * d3_radians; + φ = _[1] % 360 * d3_radians; + return reset(); + }; + projection.rotate = function(_) { + if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; + δλ = _[0] % 360 * d3_radians; + δφ = _[1] % 360 * d3_radians; + δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; + return reset(); + }; + d3.rebind(projection, projectResample, "precision"); + function reset() { + projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); + var center = project(λ, φ); + δx = x - center[0] * k; + δy = y + center[1] * k; + return invalidate(); + } + function invalidate() { + if (stream) stream.valid = false, stream = null; + return projection; + } + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return reset(); + }; + } + function d3_geo_projectionRadians(stream) { + return d3_geo_transformPoint(stream, function(x, y) { + stream.point(x * d3_radians, y * d3_radians); + }); + } + function d3_geo_equirectangular(λ, φ) { + return [ λ, φ ]; + } + (d3.geo.equirectangular = function() { + return d3_geo_projection(d3_geo_equirectangular); + }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; + d3.geo.rotation = function(rotate) { + rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); + function forward(coordinates) { + coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + } + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + }; + return forward; + }; + function d3_geo_identityRotation(λ, φ) { + return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; + } + d3_geo_identityRotation.invert = d3_geo_equirectangular; + function d3_geo_rotation(δλ, δφ, δγ) { + return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; + } + function d3_geo_forwardRotationλ(δλ) { + return function(λ, φ) { + return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; + }; + } + function d3_geo_rotationλ(δλ) { + var rotation = d3_geo_forwardRotationλ(δλ); + rotation.invert = d3_geo_forwardRotationλ(-δλ); + return rotation; + } + function d3_geo_rotationφγ(δφ, δγ) { + var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); + function rotation(λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; + return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; + } + rotation.invert = function(λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; + return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; + }; + return rotation; + } + d3.geo.circle = function() { + var origin = [ 0, 0 ], angle, precision = 6, interpolate; + function circle() { + var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = []; + interpolate(null, null, 1, { + point: function(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= d3_degrees, x[1] *= d3_degrees; + } + }); + return { + type: "Polygon", + coordinates: [ ring ] + }; + } + circle.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return circle; + }; + circle.angle = function(x) { + if (!arguments.length) return angle; + interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); + return circle; + }; + circle.precision = function(_) { + if (!arguments.length) return precision; + interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); + return circle; + }; + return circle.angle(90); + }; + function d3_geo_circleInterpolate(radius, precision) { + var cr = Math.cos(radius), sr = Math.sin(radius); + return function(from, to, direction, listener) { + var step = direction * precision; + if (from != null) { + from = d3_geo_circleAngle(cr, from); + to = d3_geo_circleAngle(cr, to); + if (direction > 0 ? from < to : from > to) from += direction * τ; + } else { + from = radius + direction * τ; + to = radius - .5 * step; + } + for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { + listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); + } + }; + } + function d3_geo_circleAngle(cr, point) { + var a = d3_geo_cartesian(point); + a[0] -= cr; + d3_geo_cartesianNormalize(a); + var angle = d3_acos(-a[1]); + return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); + } + d3.geo.distance = function(a, b) { + var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t; + return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ); + }; + d3.geo.graticule = function() { + var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; + function graticule() { + return { + type: "MultiLineString", + coordinates: lines() + }; + } + function lines() { + return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) { + return abs(x % DX) > ε; + }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { + return abs(y % DY) > ε; + }).map(y)); + } + graticule.lines = function() { + return lines().map(function(coordinates) { + return { + type: "LineString", + coordinates: coordinates + }; + }); + }; + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] + }; + }; + graticule.extent = function(_) { + if (!arguments.length) return graticule.minorExtent(); + return graticule.majorExtent(_).minorExtent(_); + }; + graticule.majorExtent = function(_) { + if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + graticule.minorExtent = function(_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + graticule.step = function(_) { + if (!arguments.length) return graticule.minorStep(); + return graticule.majorStep(_).minorStep(_); + }; + graticule.majorStep = function(_) { + if (!arguments.length) return [ DX, DY ]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + graticule.minorStep = function(_) { + if (!arguments.length) return [ dx, dy ]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = d3_geo_graticuleX(y0, y1, 90); + y = d3_geo_graticuleY(x0, x1, precision); + X = d3_geo_graticuleX(Y0, Y1, 90); + Y = d3_geo_graticuleY(X0, X1, precision); + return graticule; + }; + return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); + }; + function d3_geo_graticuleX(y0, y1, dy) { + var y = d3.range(y0, y1 - ε, dy).concat(y1); + return function(x) { + return y.map(function(y) { + return [ x, y ]; + }); + }; + } + function d3_geo_graticuleY(x0, x1, dx) { + var x = d3.range(x0, x1 - ε, dx).concat(x1); + return function(y) { + return x.map(function(x) { + return [ x, y ]; + }); + }; + } + function d3_source(d) { + return d.source; + } + function d3_target(d) { + return d.target; + } + d3.geo.greatArc = function() { + var source = d3_source, source_, target = d3_target, target_; + function greatArc() { + return { + type: "LineString", + coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] + }; + } + greatArc.distance = function() { + return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); + }; + greatArc.source = function(_) { + if (!arguments.length) return source; + source = _, source_ = typeof _ === "function" ? null : _; + return greatArc; + }; + greatArc.target = function(_) { + if (!arguments.length) return target; + target = _, target_ = typeof _ === "function" ? null : _; + return greatArc; + }; + greatArc.precision = function() { + return arguments.length ? greatArc : 0; + }; + return greatArc; + }; + d3.geo.interpolate = function(source, target) { + return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); + }; + function d3_geo_interpolate(x0, y0, x1, y1) { + var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d); + var interpolate = d ? function(t) { + var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; + return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; + } : function() { + return [ x0 * d3_degrees, y0 * d3_degrees ]; + }; + interpolate.distance = d; + return interpolate; + } + d3.geo.length = function(object) { + d3_geo_lengthSum = 0; + d3.geo.stream(object, d3_geo_length); + return d3_geo_lengthSum; + }; + var d3_geo_lengthSum; + var d3_geo_length = { + sphere: d3_noop, + point: d3_noop, + lineStart: d3_geo_lengthLineStart, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + }; + function d3_geo_lengthLineStart() { + var λ0, sinφ0, cosφ0; + d3_geo_length.point = function(λ, φ) { + λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); + d3_geo_length.point = nextPoint; + }; + d3_geo_length.lineEnd = function() { + d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; + }; + function nextPoint(λ, φ) { + var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); + d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; + } + } + function d3_geo_azimuthal(scale, angle) { + function azimuthal(λ, φ) { + var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); + return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; + } + azimuthal.invert = function(x, y) { + var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); + return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; + }; + return azimuthal; + } + var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { + return Math.sqrt(2 / (1 + cosλcosφ)); + }, function(ρ) { + return 2 * Math.asin(ρ / 2); + }); + (d3.geo.azimuthalEqualArea = function() { + return d3_geo_projection(d3_geo_azimuthalEqualArea); + }).raw = d3_geo_azimuthalEqualArea; + var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { + var c = Math.acos(cosλcosφ); + return c && c / Math.sin(c); + }, d3_identity); + (d3.geo.azimuthalEquidistant = function() { + return d3_geo_projection(d3_geo_azimuthalEquidistant); + }).raw = d3_geo_azimuthalEquidistant; + function d3_geo_conicConformal(φ0, φ1) { + var cosφ0 = Math.cos(φ0), t = function(φ) { + return Math.tan(π / 4 + φ / 2); + }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n; + if (!n) return d3_geo_mercator; + function forward(λ, φ) { + if (F > 0) { + if (φ < -halfπ + ε) φ = -halfπ + ε; + } else { + if (φ > halfπ - ε) φ = halfπ - ε; + } + var ρ = F / Math.pow(t(φ), n); + return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); + return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; + }; + return forward; + } + (d3.geo.conicConformal = function() { + return d3_geo_conic(d3_geo_conicConformal); + }).raw = d3_geo_conicConformal; + function d3_geo_conicEquidistant(φ0, φ1) { + var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; + if (abs(n) < ε) return d3_geo_equirectangular; + function forward(λ, φ) { + var ρ = G - φ; + return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = G - y; + return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; + }; + return forward; + } + (d3.geo.conicEquidistant = function() { + return d3_geo_conic(d3_geo_conicEquidistant); + }).raw = d3_geo_conicEquidistant; + var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { + return 1 / cosλcosφ; + }, Math.atan); + (d3.geo.gnomonic = function() { + return d3_geo_projection(d3_geo_gnomonic); + }).raw = d3_geo_gnomonic; + function d3_geo_mercator(λ, φ) { + return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; + } + d3_geo_mercator.invert = function(x, y) { + return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; + }; + function d3_geo_mercatorProjection(project) { + var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; + m.scale = function() { + var v = scale.apply(m, arguments); + return v === m ? clipAuto ? m.clipExtent(null) : m : v; + }; + m.translate = function() { + var v = translate.apply(m, arguments); + return v === m ? clipAuto ? m.clipExtent(null) : m : v; + }; + m.clipExtent = function(_) { + var v = clipExtent.apply(m, arguments); + if (v === m) { + if (clipAuto = _ == null) { + var k = π * scale(), t = translate(); + clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); + } + } else if (clipAuto) { + v = null; + } + return v; + }; + return m.clipExtent(null); + } + (d3.geo.mercator = function() { + return d3_geo_mercatorProjection(d3_geo_mercator); + }).raw = d3_geo_mercator; + var d3_geo_orthographic = d3_geo_azimuthal(function() { + return 1; + }, Math.asin); + (d3.geo.orthographic = function() { + return d3_geo_projection(d3_geo_orthographic); + }).raw = d3_geo_orthographic; + var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { + return 1 / (1 + cosλcosφ); + }, function(ρ) { + return 2 * Math.atan(ρ); + }); + (d3.geo.stereographic = function() { + return d3_geo_projection(d3_geo_stereographic); + }).raw = d3_geo_stereographic; + function d3_geo_transverseMercator(λ, φ) { + return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; + } + d3_geo_transverseMercator.invert = function(x, y) { + return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; + }; + (d3.geo.transverseMercator = function() { + var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; + projection.center = function(_) { + return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); + }; + projection.rotate = function(_) { + return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), + [ _[0], _[1], _[2] - 90 ]); + }; + return rotate([ 0, 0, 90 ]); + }).raw = d3_geo_transverseMercator; + d3.geom = {}; + function d3_geom_pointX(d) { + return d[0]; + } + function d3_geom_pointY(d) { + return d[1]; + } + d3.geom.hull = function(vertices) { + var x = d3_geom_pointX, y = d3_geom_pointY; + if (arguments.length) return hull(vertices); + function hull(data) { + if (data.length < 3) return []; + var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; + for (i = 0; i < n; i++) { + points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); + } + points.sort(d3_geom_hullOrder); + for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); + var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); + var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; + for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); + for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); + return polygon; + } + hull.x = function(_) { + return arguments.length ? (x = _, hull) : x; + }; + hull.y = function(_) { + return arguments.length ? (y = _, hull) : y; + }; + return hull; + }; + function d3_geom_hullUpper(points) { + var n = points.length, hull = [ 0, 1 ], hs = 2; + for (var i = 2; i < n; i++) { + while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; + hull[hs++] = i; + } + return hull.slice(0, hs); + } + function d3_geom_hullOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; + } + d3.geom.polygon = function(coordinates) { + d3_subclass(coordinates, d3_geom_polygonPrototype); + return coordinates; + }; + var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; + d3_geom_polygonPrototype.area = function() { + var i = -1, n = this.length, a, b = this[n - 1], area = 0; + while (++i < n) { + a = b; + b = this[i]; + area += a[1] * b[0] - a[0] * b[1]; + } + return area * .5; + }; + d3_geom_polygonPrototype.centroid = function(k) { + var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; + if (!arguments.length) k = -1 / (6 * this.area()); + while (++i < n) { + a = b; + b = this[i]; + c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + return [ x * k, y * k ]; + }; + d3_geom_polygonPrototype.clip = function(subject) { + var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d; + while (++i < n) { + input = subject.slice(); + subject.length = 0; + b = this[i]; + c = input[(m = input.length - closed) - 1]; + j = -1; + while (++j < m) { + d = input[j]; + if (d3_geom_polygonInside(d, a, b)) { + if (!d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + subject.push(d); + } else if (d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + c = d; + } + if (closed) subject.push(subject[0]); + a = b; + } + return subject; + }; + function d3_geom_polygonInside(p, a, b) { + return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); + } + function d3_geom_polygonIntersect(c, d, a, b) { + var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21); + return [ x1 + ua * x21, y1 + ua * y21 ]; + } + function d3_geom_polygonClosed(coordinates) { + var a = coordinates[0], b = coordinates[coordinates.length - 1]; + return !(a[0] - b[0] || a[1] - b[1]); + } + var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; + function d3_geom_voronoiBeach() { + d3_geom_voronoiRedBlackNode(this); + this.edge = this.site = this.circle = null; + } + function d3_geom_voronoiCreateBeach(site) { + var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); + beach.site = site; + return beach; + } + function d3_geom_voronoiDetachBeach(beach) { + d3_geom_voronoiDetachCircle(beach); + d3_geom_voronoiBeaches.remove(beach); + d3_geom_voronoiBeachPool.push(beach); + d3_geom_voronoiRedBlackNode(beach); + } + function d3_geom_voronoiRemoveBeach(beach) { + var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { + x: x, + y: y + }, previous = beach.P, next = beach.N, disappearing = [ beach ]; + d3_geom_voronoiDetachBeach(beach); + var lArc = previous; + while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { + previous = lArc.P; + disappearing.unshift(lArc); + d3_geom_voronoiDetachBeach(lArc); + lArc = previous; + } + disappearing.unshift(lArc); + d3_geom_voronoiDetachCircle(lArc); + var rArc = next; + while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { + next = rArc.N; + disappearing.push(rArc); + d3_geom_voronoiDetachBeach(rArc); + rArc = next; + } + disappearing.push(rArc); + d3_geom_voronoiDetachCircle(rArc); + var nArcs = disappearing.length, iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); + } + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + } + function d3_geom_voronoiAddBeach(site) { + var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; + while (node) { + dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; + if (dxl > ε) node = node.L; else { + dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); + if (dxr > ε) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -ε) { + lArc = node.P; + rArc = node; + } else if (dxr > -ε) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + var newArc = d3_geom_voronoiCreateBeach(site); + d3_geom_voronoiBeaches.insert(lArc, newArc); + if (!lArc && !rArc) return; + if (lArc === rArc) { + d3_geom_voronoiDetachCircle(lArc); + rArc = d3_geom_voronoiCreateBeach(lArc.site); + d3_geom_voronoiBeaches.insert(newArc, rArc); + newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + return; + } + if (!rArc) { + newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); + return; + } + d3_geom_voronoiDetachCircle(lArc); + d3_geom_voronoiDetachCircle(rArc); + var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = { + x: (cy * hb - by * hc) / d + ax, + y: (bx * hc - cx * hb) / d + ay + }; + d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); + newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); + rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + } + function d3_geom_voronoiLeftBreakPoint(arc, directrix) { + var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; + if (!pby2) return rfocx; + var lArc = arc.P; + if (!lArc) return -Infinity; + site = lArc.site; + var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; + if (!plby2) return lfocx; + var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + return (rfocx + lfocx) / 2; + } + function d3_geom_voronoiRightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); + var site = arc.site; + return site.y === directrix ? site.x : Infinity; + } + function d3_geom_voronoiCell(site) { + this.site = site; + this.edges = []; + } + d3_geom_voronoiCell.prototype.prepare = function() { + var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; + while (iHalfEdge--) { + edge = halfEdges[iHalfEdge].edge; + if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); + } + halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); + return halfEdges.length; + }; + function d3_geom_voronoiCloseCells(extent) { + var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end; + while (iCell--) { + cell = cells[iCell]; + if (!cell || !cell.prepare()) continue; + halfEdges = cell.edges; + nHalfEdges = halfEdges.length; + iHalfEdge = 0; + while (iHalfEdge < nHalfEdges) { + end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; + start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; + if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { + halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { + x: x0, + y: abs(x2 - x0) < ε ? y2 : y1 + } : abs(y3 - y1) < ε && x1 - x3 > ε ? { + x: abs(y2 - y1) < ε ? x2 : x1, + y: y1 + } : abs(x3 - x1) < ε && y3 - y0 > ε ? { + x: x1, + y: abs(x2 - x1) < ε ? y2 : y0 + } : abs(y3 - y0) < ε && x3 - x0 > ε ? { + x: abs(y2 - y0) < ε ? x2 : x0, + y: y0 + } : null), cell.site, null)); + ++nHalfEdges; + } + } + } + } + function d3_geom_voronoiHalfEdgeOrder(a, b) { + return b.angle - a.angle; + } + function d3_geom_voronoiCircle() { + d3_geom_voronoiRedBlackNode(this); + this.x = this.y = this.arc = this.site = this.cy = null; + } + function d3_geom_voronoiAttachCircle(arc) { + var lArc = arc.P, rArc = arc.N; + if (!lArc || !rArc) return; + var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; + if (lSite === rSite) return; + var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; + var d = 2 * (ax * cy - ay * cx); + if (d >= -ε2) return; + var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by; + var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = cy + Math.sqrt(x * x + y * y); + circle.cy = cy; + arc.circle = circle; + var before = null, node = d3_geom_voronoiCircles._; + while (node) { + if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { + if (node.L) node = node.L; else { + before = node.P; + break; + } + } else { + if (node.R) node = node.R; else { + before = node; + break; + } + } + } + d3_geom_voronoiCircles.insert(before, circle); + if (!before) d3_geom_voronoiFirstCircle = circle; + } + function d3_geom_voronoiDetachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; + d3_geom_voronoiCircles.remove(circle); + d3_geom_voronoiCirclePool.push(circle); + d3_geom_voronoiRedBlackNode(circle); + arc.circle = null; + } + } + function d3_geom_voronoiClipEdges(extent) { + var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e; + while (i--) { + e = edges[i]; + if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { + e.a = e.b = null; + edges.splice(i, 1); + } + } + } + function d3_geom_voronoiConnectEdge(edge, extent) { + var vb = edge.b; + if (vb) return true; + var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!va) va = { + x: fx, + y: y0 + }; else if (va.y >= y1) return; + vb = { + x: fx, + y: y1 + }; + } else { + if (!va) va = { + x: fx, + y: y1 + }; else if (va.y < y0) return; + vb = { + x: fx, + y: y0 + }; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!va) va = { + x: (y0 - fb) / fm, + y: y0 + }; else if (va.y >= y1) return; + vb = { + x: (y1 - fb) / fm, + y: y1 + }; + } else { + if (!va) va = { + x: (y1 - fb) / fm, + y: y1 + }; else if (va.y < y0) return; + vb = { + x: (y0 - fb) / fm, + y: y0 + }; + } + } else { + if (ly < ry) { + if (!va) va = { + x: x0, + y: fm * x0 + fb + }; else if (va.x >= x1) return; + vb = { + x: x1, + y: fm * x1 + fb + }; + } else { + if (!va) va = { + x: x1, + y: fm * x1 + fb + }; else if (va.x < x0) return; + vb = { + x: x0, + y: fm * x0 + fb + }; + } + } + } + edge.a = va; + edge.b = vb; + return true; + } + function d3_geom_voronoiEdge(lSite, rSite) { + this.l = lSite; + this.r = rSite; + this.a = this.b = null; + } + function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, rSite); + d3_geom_voronoiEdges.push(edge); + if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); + if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); + d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); + d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); + return edge; + } + function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, null); + edge.a = va; + edge.b = vb; + d3_geom_voronoiEdges.push(edge); + return edge; + } + function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { + if (!edge.a && !edge.b) { + edge.a = vertex; + edge.l = lSite; + edge.r = rSite; + } else if (edge.l === rSite) { + edge.b = vertex; + } else { + edge.a = vertex; + } + } + function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { + var va = edge.a, vb = edge.b; + this.edge = edge; + this.site = lSite; + this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y); + } + d3_geom_voronoiHalfEdge.prototype = { + start: function() { + return this.edge.l === this.site ? this.edge.a : this.edge.b; + }, + end: function() { + return this.edge.l === this.site ? this.edge.b : this.edge.a; + } + }; + function d3_geom_voronoiRedBlackTree() { + this._ = null; + } + function d3_geom_voronoiRedBlackNode(node) { + node.U = node.C = node.L = node.R = node.P = node.N = null; + } + d3_geom_voronoiRedBlackTree.prototype = { + insert: function(after, node) { + var parent, grandpa, uncle; + if (after) { + node.P = after; + node.N = after.N; + if (after.N) after.N.P = node; + after.N = node; + if (after.R) { + after = after.R; + while (after.L) after = after.L; + after.L = node; + } else { + after.R = node; + } + parent = after; + } else if (this._) { + after = d3_geom_voronoiRedBlackFirst(this._); + node.P = null; + node.N = after; + after.P = after.L = node; + parent = after; + } else { + node.P = node.N = null; + this._ = node; + parent = null; + } + node.L = node.R = null; + node.U = parent; + node.C = true; + after = node; + while (parent && parent.C) { + grandpa = parent.U; + if (parent === grandpa.L) { + uncle = grandpa.R; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.R) { + d3_geom_voronoiRedBlackRotateLeft(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + d3_geom_voronoiRedBlackRotateRight(this, grandpa); + } + } else { + uncle = grandpa.L; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.L) { + d3_geom_voronoiRedBlackRotateRight(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, grandpa); + } + } + parent = after.U; + } + this._.C = false; + }, + remove: function(node) { + if (node.N) node.N.P = node.P; + if (node.P) node.P.N = node.N; + node.N = node.P = null; + var parent = node.U, sibling, left = node.L, right = node.R, next, red; + if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); + if (parent) { + if (parent.L === node) parent.L = next; else parent.R = next; + } else { + this._ = next; + } + if (left && right) { + red = next.C; + next.C = node.C; + next.L = left; + left.U = next; + if (next !== right) { + parent = next.U; + next.U = node.U; + node = next.R; + parent.L = node; + next.R = right; + right.U = next; + } else { + next.U = parent; + parent = next; + node = next.R; + } + } else { + red = node.C; + node = next; + } + if (node) node.U = parent; + if (red) return; + if (node && node.C) { + node.C = false; + return; + } + do { + if (node === this._) break; + if (node === parent.L) { + sibling = parent.R; + if (sibling.C) { + sibling.C = false; + parent.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, parent); + sibling = parent.R; + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false; + sibling.C = true; + d3_geom_voronoiRedBlackRotateRight(this, sibling); + sibling = parent.R; + } + sibling.C = parent.C; + parent.C = sibling.R.C = false; + d3_geom_voronoiRedBlackRotateLeft(this, parent); + node = this._; + break; + } + } else { + sibling = parent.L; + if (sibling.C) { + sibling.C = false; + parent.C = true; + d3_geom_voronoiRedBlackRotateRight(this, parent); + sibling = parent.L; + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false; + sibling.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, sibling); + sibling = parent.L; + } + sibling.C = parent.C; + parent.C = sibling.L.C = false; + d3_geom_voronoiRedBlackRotateRight(this, parent); + node = this._; + break; + } + } + sibling.C = true; + node = parent; + parent = parent.U; + } while (!node.C); + if (node) node.C = false; + } + }; + function d3_geom_voronoiRedBlackRotateLeft(tree, node) { + var p = node, q = node.R, parent = p.U; + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q; + } else { + tree._ = q; + } + q.U = parent; + p.U = q; + p.R = q.L; + if (p.R) p.R.U = p; + q.L = p; + } + function d3_geom_voronoiRedBlackRotateRight(tree, node) { + var p = node, q = node.L, parent = p.U; + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q; + } else { + tree._ = q; + } + q.U = parent; + p.U = q; + p.L = q.R; + if (p.L) p.L.U = p; + q.R = p; + } + function d3_geom_voronoiRedBlackFirst(node) { + while (node.L) node = node.L; + return node; + } + function d3_geom_voronoi(sites, bbox) { + var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; + d3_geom_voronoiEdges = []; + d3_geom_voronoiCells = new Array(sites.length); + d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); + d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); + while (true) { + circle = d3_geom_voronoiFirstCircle; + if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { + if (site.x !== x0 || site.y !== y0) { + d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); + d3_geom_voronoiAddBeach(site); + x0 = site.x, y0 = site.y; + } + site = sites.pop(); + } else if (circle) { + d3_geom_voronoiRemoveBeach(circle.arc); + } else { + break; + } + } + if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); + var diagram = { + cells: d3_geom_voronoiCells, + edges: d3_geom_voronoiEdges + }; + d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; + return diagram; + } + function d3_geom_voronoiVertexOrder(a, b) { + return b.y - a.y || b.x - a.x; + } + d3.geom.voronoi = function(points) { + var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; + if (points) return voronoi(points); + function voronoi(data) { + var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; + d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { + var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { + var s = e.start(); + return [ s.x, s.y ]; + }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; + polygon.point = data[i]; + }); + return polygons; + } + function sites(data) { + return data.map(function(d, i) { + return { + x: Math.round(fx(d, i) / ε) * ε, + y: Math.round(fy(d, i) / ε) * ε, + i: i + }; + }); + } + voronoi.links = function(data) { + return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { + return edge.l && edge.r; + }).map(function(edge) { + return { + source: data[edge.l.i], + target: data[edge.r.i] + }; + }); + }; + voronoi.triangles = function(data) { + var triangles = []; + d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { + var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l; + while (++j < m) { + e0 = e1; + s0 = s1; + e1 = edges[j].edge; + s1 = e1.l === site ? e1.r : e1.l; + if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { + triangles.push([ data[i], data[s0.i], data[s1.i] ]); + } + } + }); + return triangles; + }; + voronoi.x = function(_) { + return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; + }; + voronoi.y = function(_) { + return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; + }; + voronoi.clipExtent = function(_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; + clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; + return voronoi; + }; + voronoi.size = function(_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; + return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); + }; + return voronoi; + }; + var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; + function d3_geom_voronoiTriangleArea(a, b, c) { + return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); + } + d3.geom.delaunay = function(vertices) { + return d3.geom.voronoi().triangles(vertices); + }; + d3.geom.quadtree = function(points, x1, y1, x2, y2) { + var x = d3_geom_pointX, y = d3_geom_pointY, compat; + if (compat = arguments.length) { + x = d3_geom_quadtreeCompatX; + y = d3_geom_quadtreeCompatY; + if (compat === 3) { + y2 = y1; + x2 = x1; + y1 = x1 = 0; + } + return quadtree(points); + } + function quadtree(data) { + var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; + if (x1 != null) { + x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; + } else { + x2_ = y2_ = -(x1_ = y1_ = Infinity); + xs = [], ys = []; + n = data.length; + if (compat) for (i = 0; i < n; ++i) { + d = data[i]; + if (d.x < x1_) x1_ = d.x; + if (d.y < y1_) y1_ = d.y; + if (d.x > x2_) x2_ = d.x; + if (d.y > y2_) y2_ = d.y; + xs.push(d.x); + ys.push(d.y); + } else for (i = 0; i < n; ++i) { + var x_ = +fx(d = data[i], i), y_ = +fy(d, i); + if (x_ < x1_) x1_ = x_; + if (y_ < y1_) y1_ = y_; + if (x_ > x2_) x2_ = x_; + if (y_ > y2_) y2_ = y_; + xs.push(x_); + ys.push(y_); + } + } + var dx = x2_ - x1_, dy = y2_ - y1_; + if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; + function insert(n, d, x, y, x1, y1, x2, y2) { + if (isNaN(x) || isNaN(y)) return; + if (n.leaf) { + var nx = n.x, ny = n.y; + if (nx != null) { + if (abs(nx - x) + abs(ny - y) < .01) { + insertChild(n, d, x, y, x1, y1, x2, y2); + } else { + var nPoint = n.point; + n.x = n.y = n.point = null; + insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); + insertChild(n, d, x, y, x1, y1, x2, y2); + } + } else { + n.x = x, n.y = y, n.point = d; + } + } else { + insertChild(n, d, x, y, x1, y1, x2, y2); + } + } + function insertChild(n, d, x, y, x1, y1, x2, y2) { + var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right; + n.leaf = false; + n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); + if (right) x1 = sx; else x2 = sx; + if (bottom) y1 = sy; else y2 = sy; + insert(n, d, x, y, x1, y1, x2, y2); + } + var root = d3_geom_quadtreeNode(); + root.add = function(d) { + insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); + }; + root.visit = function(f) { + d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); + }; + i = -1; + if (x1 == null) { + while (++i < n) { + insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); + } + --i; + } else data.forEach(root.add); + xs = ys = data = d = null; + return root; + } + quadtree.x = function(_) { + return arguments.length ? (x = _, quadtree) : x; + }; + quadtree.y = function(_) { + return arguments.length ? (y = _, quadtree) : y; + }; + quadtree.extent = function(_) { + if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], + y2 = +_[1][1]; + return quadtree; + }; + quadtree.size = function(_) { + if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; + return quadtree; + }; + return quadtree; + }; + function d3_geom_quadtreeCompatX(d) { + return d.x; + } + function d3_geom_quadtreeCompatY(d) { + return d.y; + } + function d3_geom_quadtreeNode() { + return { + leaf: true, + nodes: [], + point: null, + x: null, + y: null + }; + } + function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { + if (!f(node, x1, y1, x2, y2)) { + var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; + if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); + if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); + if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); + if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); + } + } + d3.interpolateRgb = d3_interpolateRgb; + function d3_interpolateRgb(a, b) { + a = d3.rgb(a); + b = d3.rgb(b); + var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; + return function(t) { + return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); + }; + } + d3.interpolateObject = d3_interpolateObject; + function d3_interpolateObject(a, b) { + var i = {}, c = {}, k; + for (k in a) { + if (k in b) { + i[k] = d3_interpolate(a[k], b[k]); + } else { + c[k] = a[k]; + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k]; + } + } + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; + } + d3.interpolateNumber = d3_interpolateNumber; + function d3_interpolateNumber(a, b) { + b -= a = +a; + return function(t) { + return a + b * t; + }; + } + d3.interpolateString = d3_interpolateString; + function d3_interpolateString(a, b) { + var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; + a = a + "", b = b + ""; + while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { + if ((bs = bm.index) > bi) { + bs = b.substring(bi, bs); + if (s[i]) s[i] += bs; else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { + if (s[i]) s[i] += bm; else s[++i] = bm; + } else { + s[++i] = null; + q.push({ + i: i, + x: d3_interpolateNumber(am, bm) + }); + } + bi = d3_interpolate_numberB.lastIndex; + } + if (bi < b.length) { + bs = b.substring(bi); + if (s[i]) s[i] += bs; else s[++i] = bs; + } + return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { + return b(t) + ""; + }) : function() { + return b; + } : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); + } + var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); + d3.interpolate = d3_interpolate; + function d3_interpolate(a, b) { + var i = d3.interpolators.length, f; + while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; + return f; + } + d3.interpolators = [ function(a, b) { + var t = typeof b; + return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); + } ]; + d3.interpolateArray = d3_interpolateArray; + function d3_interpolateArray(a, b) { + var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; + for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); + for (;i < na; ++i) c[i] = a[i]; + for (;i < nb; ++i) c[i] = b[i]; + return function(t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t); + return c; + }; + } + var d3_ease_default = function() { + return d3_identity; + }; + var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function() { + return d3_ease_quad; + }, + cubic: function() { + return d3_ease_cubic; + }, + sin: function() { + return d3_ease_sin; + }, + exp: function() { + return d3_ease_exp; + }, + circle: function() { + return d3_ease_circle; + }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { + return d3_ease_bounce; + } + }); + var d3_ease_mode = d3.map({ + "in": d3_identity, + out: d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { + return d3_ease_reflect(d3_ease_reverse(f)); + } + }); + d3.ease = function(name) { + var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_identity; + return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); + }; + function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; + } + function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; + } + function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); + }; + } + function d3_ease_quad(t) { + return t * t; + } + function d3_ease_cubic(t) { + return t * t * t; + } + function d3_ease_cubicInOut(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + var t2 = t * t, t3 = t2 * t; + return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); + } + function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + }; + } + function d3_ease_sin(t) { + return 1 - Math.cos(t * halfπ); + } + function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); + } + function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); + } + function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = .45; + if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); + }; + } + function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } + function d3_ease_bounce(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } + d3.interpolateHcl = d3_interpolateHcl; + function d3_interpolateHcl(a, b) { + a = d3.hcl(a); + b = d3.hcl(b); + var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; + if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; + return function(t) { + return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; + }; + } + d3.interpolateHsl = d3_interpolateHsl; + function d3_interpolateHsl(a, b) { + a = d3.hsl(a); + b = d3.hsl(b); + var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; + if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; + return function(t) { + return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; + }; + } + d3.interpolateLab = d3_interpolateLab; + function d3_interpolateLab(a, b) { + a = d3.lab(a); + b = d3.lab(b); + var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; + return function(t) { + return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; + }; + } + d3.interpolateRound = d3_interpolateRound; + function d3_interpolateRound(a, b) { + b -= a; + return function(t) { + return Math.round(a + b * t); + }; + } + d3.transform = function(string) { + var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); + return (d3.transform = function(string) { + if (string != null) { + g.setAttribute("transform", string); + var t = g.transform.baseVal.consolidate(); + } + return new d3_transform(t ? t.matrix : d3_transformIdentity); + })(string); + }; + function d3_transform(m) { + var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; + if (r0[0] * r1[1] < r1[0] * r0[1]) { + r0[0] *= -1; + r0[1] *= -1; + kx *= -1; + kz *= -1; + } + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; + this.translate = [ m.e, m.f ]; + this.scale = [ kx, ky ]; + this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; + } + d3_transform.prototype.toString = function() { + return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; + }; + function d3_transformDot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + } + function d3_transformNormalize(a) { + var k = Math.sqrt(d3_transformDot(a, a)); + if (k) { + a[0] /= k; + a[1] /= k; + } + return k; + } + function d3_transformCombine(a, b, k) { + a[0] += k * b[0]; + a[1] += k * b[1]; + return a; + } + var d3_transformIdentity = { + a: 1, + b: 0, + c: 0, + d: 1, + e: 0, + f: 0 + }; + d3.interpolateTransform = d3_interpolateTransform; + function d3_interpolateTransform(a, b) { + var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; + if (ta[0] != tb[0] || ta[1] != tb[1]) { + s.push("translate(", null, ",", null, ")"); + q.push({ + i: 1, + x: d3_interpolateNumber(ta[0], tb[0]) + }, { + i: 3, + x: d3_interpolateNumber(ta[1], tb[1]) + }); + } else if (tb[0] || tb[1]) { + s.push("translate(" + tb + ")"); + } else { + s.push(""); + } + if (ra != rb) { + if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; + q.push({ + i: s.push(s.pop() + "rotate(", null, ")") - 2, + x: d3_interpolateNumber(ra, rb) + }); + } else if (rb) { + s.push(s.pop() + "rotate(" + rb + ")"); + } + if (wa != wb) { + q.push({ + i: s.push(s.pop() + "skewX(", null, ")") - 2, + x: d3_interpolateNumber(wa, wb) + }); + } else if (wb) { + s.push(s.pop() + "skewX(" + wb + ")"); + } + if (ka[0] != kb[0] || ka[1] != kb[1]) { + n = s.push(s.pop() + "scale(", null, ",", null, ")"); + q.push({ + i: n - 4, + x: d3_interpolateNumber(ka[0], kb[0]) + }, { + i: n - 2, + x: d3_interpolateNumber(ka[1], kb[1]) + }); + } else if (kb[0] != 1 || kb[1] != 1) { + s.push(s.pop() + "scale(" + kb + ")"); + } + n = q.length; + return function(t) { + var i = -1, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + } + function d3_uninterpolateNumber(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { + return (x - a) * b; + }; + } + function d3_uninterpolateClamp(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { + return Math.max(0, Math.min(1, (x - a) * b)); + }; + } + d3.layout = {}; + d3.layout.bundle = function() { + return function(links) { + var paths = [], i = -1, n = links.length; + while (++i < n) paths.push(d3_layout_bundlePath(links[i])); + return paths; + }; + }; + function d3_layout_bundlePath(link) { + var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; + while (start !== lca) { + start = start.parent; + points.push(start); + } + var k = points.length; + while (end !== lca) { + points.splice(k, 0, end); + end = end.parent; + } + return points; + } + function d3_layout_bundleAncestors(node) { + var ancestors = [], parent = node.parent; + while (parent != null) { + ancestors.push(node); + node = parent; + parent = parent.parent; + } + ancestors.push(node); + return ancestors; + } + function d3_layout_bundleLeastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; + while (aNode === bNode) { + sharedNode = aNode; + aNode = aNodes.pop(); + bNode = bNodes.pop(); + } + return sharedNode; + } + d3.layout.chord = function() { + var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; + function relayout() { + var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; + chords = []; + groups = []; + k = 0, i = -1; + while (++i < n) { + x = 0, j = -1; + while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(d3.range(n)); + k += x; + } + if (sortGroups) { + groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); + } + if (sortSubgroups) { + subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); + } + k = (τ - padding * n) / k; + x = 0, i = -1; + while (++i < n) { + x0 = x, j = -1; + while (++j < n) { + var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; + subgroups[di + "-" + dj] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: (x - x0) / k + }; + x += padding; + } + i = -1; + while (++i < n) { + j = i - 1; + while (++j < n) { + var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; + if (source.value || target.value) { + chords.push(source.value < target.value ? { + source: target, + target: source + } : { + source: source, + target: target + }); + } + } + } + if (sortChords) resort(); + } + function resort() { + chords.sort(function(a, b) { + return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); + }); + } + chord.matrix = function(x) { + if (!arguments.length) return matrix; + n = (matrix = x) && matrix.length; + chords = groups = null; + return chord; + }; + chord.padding = function(x) { + if (!arguments.length) return padding; + padding = x; + chords = groups = null; + return chord; + }; + chord.sortGroups = function(x) { + if (!arguments.length) return sortGroups; + sortGroups = x; + chords = groups = null; + return chord; + }; + chord.sortSubgroups = function(x) { + if (!arguments.length) return sortSubgroups; + sortSubgroups = x; + chords = null; + return chord; + }; + chord.sortChords = function(x) { + if (!arguments.length) return sortChords; + sortChords = x; + if (chords) resort(); + return chord; + }; + chord.chords = function() { + if (!chords) relayout(); + return chords; + }; + chord.groups = function() { + if (!groups) relayout(); + return groups; + }; + return chord; + }; + d3.layout.force = function() { + var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges; + function repulse(node) { + return function(quad, x1, _, x2) { + if (quad.point !== node) { + var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; + if (dw * dw / theta2 < dn) { + if (dn < chargeDistance2) { + var k = quad.charge / dn; + node.px -= dx * k; + node.py -= dy * k; + } + return true; + } + if (quad.point && dn && dn < chargeDistance2) { + var k = quad.pointCharge / dn; + node.px -= dx * k; + node.py -= dy * k; + } + } + return !quad.charge; + }; + } + force.tick = function() { + if ((alpha *= .99) < .005) { + event.end({ + type: "end", + alpha: alpha = 0 + }); + return true; + } + var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; + for (i = 0; i < m; ++i) { + o = links[i]; + s = o.source; + t = o.target; + x = t.x - s.x; + y = t.y - s.y; + if (l = x * x + y * y) { + l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; + x *= l; + y *= l; + t.x -= x * (k = s.weight / (t.weight + s.weight)); + t.y -= y * k; + s.x += x * (k = 1 - k); + s.y += y * k; + } + } + if (k = alpha * gravity) { + x = size[0] / 2; + y = size[1] / 2; + i = -1; + if (k) while (++i < n) { + o = nodes[i]; + o.x += (x - o.x) * k; + o.y += (y - o.y) * k; + } + } + if (charge) { + d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); + i = -1; + while (++i < n) { + if (!(o = nodes[i]).fixed) { + q.visit(repulse(o)); + } + } + } + i = -1; + while (++i < n) { + o = nodes[i]; + if (o.fixed) { + o.x = o.px; + o.y = o.py; + } else { + o.x -= (o.px - (o.px = o.x)) * friction; + o.y -= (o.py - (o.py = o.y)) * friction; + } + } + event.tick({ + type: "tick", + alpha: alpha + }); + }; + force.nodes = function(x) { + if (!arguments.length) return nodes; + nodes = x; + return force; + }; + force.links = function(x) { + if (!arguments.length) return links; + links = x; + return force; + }; + force.size = function(x) { + if (!arguments.length) return size; + size = x; + return force; + }; + force.linkDistance = function(x) { + if (!arguments.length) return linkDistance; + linkDistance = typeof x === "function" ? x : +x; + return force; + }; + force.distance = force.linkDistance; + force.linkStrength = function(x) { + if (!arguments.length) return linkStrength; + linkStrength = typeof x === "function" ? x : +x; + return force; + }; + force.friction = function(x) { + if (!arguments.length) return friction; + friction = +x; + return force; + }; + force.charge = function(x) { + if (!arguments.length) return charge; + charge = typeof x === "function" ? x : +x; + return force; + }; + force.chargeDistance = function(x) { + if (!arguments.length) return Math.sqrt(chargeDistance2); + chargeDistance2 = x * x; + return force; + }; + force.gravity = function(x) { + if (!arguments.length) return gravity; + gravity = +x; + return force; + }; + force.theta = function(x) { + if (!arguments.length) return Math.sqrt(theta2); + theta2 = x * x; + return force; + }; + force.alpha = function(x) { + if (!arguments.length) return alpha; + x = +x; + if (alpha) { + if (x > 0) alpha = x; else alpha = 0; + } else if (x > 0) { + event.start({ + type: "start", + alpha: alpha = x + }); + d3.timer(force.tick); + } + return force; + }; + force.start = function() { + var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; + for (i = 0; i < n; ++i) { + (o = nodes[i]).index = i; + o.weight = 0; + } + for (i = 0; i < m; ++i) { + o = links[i]; + if (typeof o.source == "number") o.source = nodes[o.source]; + if (typeof o.target == "number") o.target = nodes[o.target]; + ++o.source.weight; + ++o.target.weight; + } + for (i = 0; i < n; ++i) { + o = nodes[i]; + if (isNaN(o.x)) o.x = position("x", w); + if (isNaN(o.y)) o.y = position("y", h); + if (isNaN(o.px)) o.px = o.x; + if (isNaN(o.py)) o.py = o.y; + } + distances = []; + if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance; + strengths = []; + if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength; + charges = []; + if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge; + function position(dimension, size) { + if (!neighbors) { + neighbors = new Array(n); + for (j = 0; j < n; ++j) { + neighbors[j] = []; + } + for (j = 0; j < m; ++j) { + var o = links[j]; + neighbors[o.source.index].push(o.target); + neighbors[o.target.index].push(o.source); + } + } + var candidates = neighbors[i], j = -1, m = candidates.length, x; + while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x; + return Math.random() * size; + } + return force.resume(); + }; + force.resume = function() { + return force.alpha(.1); + }; + force.stop = function() { + return force.alpha(0); + }; + force.drag = function() { + if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend); + if (!arguments.length) return drag; + this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); + }; + function dragmove(d) { + d.px = d3.event.x, d.py = d3.event.y; + force.resume(); + } + return d3.rebind(force, event, "on"); + }; + function d3_layout_forceDragstart(d) { + d.fixed |= 2; + } + function d3_layout_forceDragend(d) { + d.fixed &= ~6; + } + function d3_layout_forceMouseover(d) { + d.fixed |= 4; + d.px = d.x, d.py = d.y; + } + function d3_layout_forceMouseout(d) { + d.fixed &= ~4; + } + function d3_layout_forceAccumulate(quad, alpha, charges) { + var cx = 0, cy = 0; + quad.charge = 0; + if (!quad.leaf) { + var nodes = quad.nodes, n = nodes.length, i = -1, c; + while (++i < n) { + c = nodes[i]; + if (c == null) continue; + d3_layout_forceAccumulate(c, alpha, charges); + quad.charge += c.charge; + cx += c.charge * c.cx; + cy += c.charge * c.cy; + } + } + if (quad.point) { + if (!quad.leaf) { + quad.point.x += Math.random() - .5; + quad.point.y += Math.random() - .5; + } + var k = alpha * charges[quad.point.index]; + quad.charge += quad.pointCharge = k; + cx += k * quad.point.x; + cy += k * quad.point.y; + } + quad.cx = cx / quad.charge; + quad.cy = cy / quad.charge; + } + var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; + d3.layout.hierarchy = function() { + var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; + function hierarchy(root) { + var stack = [ root ], nodes = [], node; + root.depth = 0; + while ((node = stack.pop()) != null) { + nodes.push(node); + if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { + var n, childs, child; + while (--n >= 0) { + stack.push(child = childs[n]); + child.parent = node; + child.depth = node.depth + 1; + } + if (value) node.value = 0; + node.children = childs; + } else { + if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; + delete node.children; + } + } + d3_layout_hierarchyVisitAfter(root, function(node) { + var childs, parent; + if (sort && (childs = node.children)) childs.sort(sort); + if (value && (parent = node.parent)) parent.value += node.value; + }); + return nodes; + } + hierarchy.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return hierarchy; + }; + hierarchy.children = function(x) { + if (!arguments.length) return children; + children = x; + return hierarchy; + }; + hierarchy.value = function(x) { + if (!arguments.length) return value; + value = x; + return hierarchy; + }; + hierarchy.revalue = function(root) { + if (value) { + d3_layout_hierarchyVisitBefore(root, function(node) { + if (node.children) node.value = 0; + }); + d3_layout_hierarchyVisitAfter(root, function(node) { + var parent; + if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; + if (parent = node.parent) parent.value += node.value; + }); + } + return root; + }; + return hierarchy; + }; + function d3_layout_hierarchyRebind(object, hierarchy) { + d3.rebind(object, hierarchy, "sort", "children", "value"); + object.nodes = object; + object.links = d3_layout_hierarchyLinks; + return object; + } + function d3_layout_hierarchyVisitBefore(node, callback) { + var nodes = [ node ]; + while ((node = nodes.pop()) != null) { + callback(node); + if ((children = node.children) && (n = children.length)) { + var n, children; + while (--n >= 0) nodes.push(children[n]); + } + } + } + function d3_layout_hierarchyVisitAfter(node, callback) { + var nodes = [ node ], nodes2 = []; + while ((node = nodes.pop()) != null) { + nodes2.push(node); + if ((children = node.children) && (n = children.length)) { + var i = -1, n, children; + while (++i < n) nodes.push(children[i]); + } + } + while ((node = nodes2.pop()) != null) { + callback(node); + } + } + function d3_layout_hierarchyChildren(d) { + return d.children; + } + function d3_layout_hierarchyValue(d) { + return d.value; + } + function d3_layout_hierarchySort(a, b) { + return b.value - a.value; + } + function d3_layout_hierarchyLinks(nodes) { + return d3.merge(nodes.map(function(parent) { + return (parent.children || []).map(function(child) { + return { + source: parent, + target: child + }; + }); + })); + } + d3.layout.partition = function() { + var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; + function position(node, x, dx, dy) { + var children = node.children; + node.x = x; + node.y = node.depth * dy; + node.dx = dx; + node.dy = dy; + if (children && (n = children.length)) { + var i = -1, n, c, d; + dx = node.value ? dx / node.value : 0; + while (++i < n) { + position(c = children[i], x, d = c.value * dx, dy); + x += d; + } + } + } + function depth(node) { + var children = node.children, d = 0; + if (children && (n = children.length)) { + var i = -1, n; + while (++i < n) d = Math.max(d, depth(children[i])); + } + return 1 + d; + } + function partition(d, i) { + var nodes = hierarchy.call(this, d, i); + position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); + return nodes; + } + partition.size = function(x) { + if (!arguments.length) return size; + size = x; + return partition; + }; + return d3_layout_hierarchyRebind(partition, hierarchy); + }; + d3.layout.pie = function() { + var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ; + function pie(data) { + var values = data.map(function(d, i) { + return +value.call(pie, d, i); + }); + var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); + var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values); + var index = d3.range(data.length); + if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { + return values[j] - values[i]; + } : function(i, j) { + return sort(data[i], data[j]); + }); + var arcs = []; + index.forEach(function(i) { + var d; + arcs[i] = { + data: data[i], + value: d = values[i], + startAngle: a, + endAngle: a += d * k + }; + }); + return arcs; + } + pie.value = function(x) { + if (!arguments.length) return value; + value = x; + return pie; + }; + pie.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return pie; + }; + pie.startAngle = function(x) { + if (!arguments.length) return startAngle; + startAngle = x; + return pie; + }; + pie.endAngle = function(x) { + if (!arguments.length) return endAngle; + endAngle = x; + return pie; + }; + return pie; + }; + var d3_layout_pieSortByValue = {}; + d3.layout.stack = function() { + var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; + function stack(data, index) { + var series = data.map(function(d, i) { + return values.call(stack, d, i); + }); + var points = series.map(function(d) { + return d.map(function(v, i) { + return [ x.call(stack, v, i), y.call(stack, v, i) ]; + }); + }); + var orders = order.call(stack, points, index); + series = d3.permute(series, orders); + points = d3.permute(points, orders); + var offsets = offset.call(stack, points, index); + var n = series.length, m = series[0].length, i, j, o; + for (j = 0; j < m; ++j) { + out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); + for (i = 1; i < n; ++i) { + out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); + } + } + return data; + } + stack.values = function(x) { + if (!arguments.length) return values; + values = x; + return stack; + }; + stack.order = function(x) { + if (!arguments.length) return order; + order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; + return stack; + }; + stack.offset = function(x) { + if (!arguments.length) return offset; + offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; + return stack; + }; + stack.x = function(z) { + if (!arguments.length) return x; + x = z; + return stack; + }; + stack.y = function(z) { + if (!arguments.length) return y; + y = z; + return stack; + }; + stack.out = function(z) { + if (!arguments.length) return out; + out = z; + return stack; + }; + return stack; + }; + function d3_layout_stackX(d) { + return d.x; + } + function d3_layout_stackY(d) { + return d.y; + } + function d3_layout_stackOut(d, y0, y) { + d.y0 = y0; + d.y = y; + } + var d3_layout_stackOrders = d3.map({ + "inside-out": function(data) { + var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { + return max[a] - max[b]; + }), top = 0, bottom = 0, tops = [], bottoms = []; + for (i = 0; i < n; ++i) { + j = index[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + return bottoms.reverse().concat(tops); + }, + reverse: function(data) { + return d3.range(data.length).reverse(); + }, + "default": d3_layout_stackOrderDefault + }); + var d3_layout_stackOffsets = d3.map({ + silhouette: function(data) { + var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o > max) max = o; + sums.push(o); + } + for (j = 0; j < m; ++j) { + y0[j] = (max - sums[j]) / 2; + } + return y0; + }, + wiggle: function(data) { + var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; + y0[0] = o = o0 = 0; + for (j = 1; j < m; ++j) { + for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; + for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { + for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { + s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; + } + s2 += s3 * data[i][j][1]; + } + y0[j] = o -= s1 ? s2 / s1 * dx : 0; + if (o < o0) o0 = o; + } + for (j = 0; j < m; ++j) y0[j] -= o0; + return y0; + }, + expand: function(data) { + var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; + } + for (j = 0; j < m; ++j) y0[j] = 0; + return y0; + }, + zero: d3_layout_stackOffsetZero + }); + function d3_layout_stackOrderDefault(data) { + return d3.range(data.length); + } + function d3_layout_stackOffsetZero(data) { + var j = -1, m = data[0].length, y0 = []; + while (++j < m) y0[j] = 0; + return y0; + } + function d3_layout_stackMaxIndex(array) { + var i = 1, j = 0, v = array[0][1], k, n = array.length; + for (;i < n; ++i) { + if ((k = array[i][1]) > v) { + j = i; + v = k; + } + } + return j; + } + function d3_layout_stackReduceSum(d) { + return d.reduce(d3_layout_stackSum, 0); + } + function d3_layout_stackSum(p, d) { + return p + d[1]; + } + d3.layout.histogram = function() { + var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; + function histogram(data, i) { + var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; + while (++i < m) { + bin = bins[i] = []; + bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); + bin.y = 0; + } + if (m > 0) { + i = -1; + while (++i < n) { + x = values[i]; + if (x >= range[0] && x <= range[1]) { + bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; + bin.y += k; + bin.push(data[i]); + } + } + } + return bins; + } + histogram.value = function(x) { + if (!arguments.length) return valuer; + valuer = x; + return histogram; + }; + histogram.range = function(x) { + if (!arguments.length) return ranger; + ranger = d3_functor(x); + return histogram; + }; + histogram.bins = function(x) { + if (!arguments.length) return binner; + binner = typeof x === "number" ? function(range) { + return d3_layout_histogramBinFixed(range, x); + } : d3_functor(x); + return histogram; + }; + histogram.frequency = function(x) { + if (!arguments.length) return frequency; + frequency = !!x; + return histogram; + }; + return histogram; + }; + function d3_layout_histogramBinSturges(range, values) { + return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); + } + function d3_layout_histogramBinFixed(range, n) { + var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; + while (++x <= n) f[x] = m * x + b; + return f; + } + function d3_layout_histogramRange(values) { + return [ d3.min(values), d3.max(values) ]; + } + d3.layout.pack = function() { + var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; + function pack(d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() { + return radius; + }; + root.x = root.y = 0; + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r = +r(d.value); + }); + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); + if (padding) { + var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r += dr; + }); + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r -= dr; + }); + } + d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); + return nodes; + } + pack.size = function(_) { + if (!arguments.length) return size; + size = _; + return pack; + }; + pack.radius = function(_) { + if (!arguments.length) return radius; + radius = _ == null || typeof _ === "function" ? _ : +_; + return pack; + }; + pack.padding = function(_) { + if (!arguments.length) return padding; + padding = +_; + return pack; + }; + return d3_layout_hierarchyRebind(pack, hierarchy); + }; + function d3_layout_packSort(a, b) { + return a.value - b.value; + } + function d3_layout_packInsert(a, b) { + var c = a._pack_next; + a._pack_next = b; + b._pack_prev = a; + b._pack_next = c; + c._pack_prev = b; + } + function d3_layout_packSplice(a, b) { + a._pack_next = b; + b._pack_prev = a; + } + function d3_layout_packIntersects(a, b) { + var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; + return .999 * dr * dr > dx * dx + dy * dy; + } + function d3_layout_packSiblings(node) { + if (!(nodes = node.children) || !(n = nodes.length)) return; + var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; + function bound(node) { + xMin = Math.min(node.x - node.r, xMin); + xMax = Math.max(node.x + node.r, xMax); + yMin = Math.min(node.y - node.r, yMin); + yMax = Math.max(node.y + node.r, yMax); + } + nodes.forEach(d3_layout_packLink); + a = nodes[0]; + a.x = -a.r; + a.y = 0; + bound(a); + if (n > 1) { + b = nodes[1]; + b.x = b.r; + b.y = 0; + bound(b); + if (n > 2) { + c = nodes[2]; + d3_layout_packPlace(a, b, c); + bound(c); + d3_layout_packInsert(a, c); + a._pack_prev = c; + d3_layout_packInsert(c, b); + b = a._pack_next; + for (i = 3; i < n; i++) { + d3_layout_packPlace(a, b, c = nodes[i]); + var isect = 0, s1 = 1, s2 = 1; + for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { + if (d3_layout_packIntersects(j, c)) { + isect = 1; + break; + } + } + if (isect == 1) { + for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { + if (d3_layout_packIntersects(k, c)) { + break; + } + } + } + if (isect) { + if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); + i--; + } else { + d3_layout_packInsert(a, c); + b = c; + bound(c); + } + } + } + } + var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; + for (i = 0; i < n; i++) { + c = nodes[i]; + c.x -= cx; + c.y -= cy; + cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); + } + node.r = cr; + nodes.forEach(d3_layout_packUnlink); + } + function d3_layout_packLink(node) { + node._pack_next = node._pack_prev = node; + } + function d3_layout_packUnlink(node) { + delete node._pack_next; + delete node._pack_prev; + } + function d3_layout_packTransform(node, x, y, k) { + var children = node.children; + node.x = x += k * node.x; + node.y = y += k * node.y; + node.r *= k; + if (children) { + var i = -1, n = children.length; + while (++i < n) d3_layout_packTransform(children[i], x, y, k); + } + } + function d3_layout_packPlace(a, b, c) { + var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; + if (db && (dx || dy)) { + var da = b.r + c.r, dc = dx * dx + dy * dy; + da *= da; + db *= db; + var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); + c.x = a.x + x * dx + y * dy; + c.y = a.y + x * dy - y * dx; + } else { + c.x = a.x + db; + c.y = a.y; + } + } + d3.layout.tree = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; + function tree(d, i) { + var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); + d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; + d3_layout_hierarchyVisitBefore(root1, secondWalk); + if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { + var left = root0, right = root0, bottom = root0; + d3_layout_hierarchyVisitBefore(root0, function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); + d3_layout_hierarchyVisitBefore(root0, function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + return nodes; + } + function wrapTree(root0) { + var root1 = { + A: null, + children: [ root0 ] + }, queue = [ root1 ], node1; + while ((node1 = queue.pop()) != null) { + for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { + queue.push((children[i] = child = { + _: children[i], + parent: node1, + children: (child = children[i].children) && child.slice() || [], + A: null, + a: null, + z: 0, + m: 0, + c: 0, + s: 0, + t: null, + i: i + }).a = child); + } + } + return root1.children[0]; + } + function firstWalk(v) { + var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; + if (children.length) { + d3_layout_treeShift(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + function apportion(v, w, ancestor) { + if (w) { + var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; + while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { + vom = d3_layout_treeLeft(vom); + vop = d3_layout_treeRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !d3_layout_treeRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !d3_layout_treeLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + function sizeNode(node) { + node.x *= size[0]; + node.y = node.depth * size[1]; + } + tree.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return tree; + }; + tree.size = function(x) { + if (!arguments.length) return nodeSize ? null : size; + nodeSize = (size = x) == null ? sizeNode : null; + return tree; + }; + tree.nodeSize = function(x) { + if (!arguments.length) return nodeSize ? size : null; + nodeSize = (size = x) == null ? null : sizeNode; + return tree; + }; + return d3_layout_hierarchyRebind(tree, hierarchy); + }; + function d3_layout_treeSeparation(a, b) { + return a.parent == b.parent ? 1 : 2; + } + function d3_layout_treeLeft(v) { + var children = v.children; + return children.length ? children[0] : v.t; + } + function d3_layout_treeRight(v) { + var children = v.children, n; + return (n = children.length) ? children[n - 1] : v.t; + } + function d3_layout_treeMove(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; + } + function d3_layout_treeShift(v) { + var shift = 0, change = 0, children = v.children, i = children.length, w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } + } + function d3_layout_treeAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; + } + d3.layout.cluster = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; + function cluster(d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; + d3_layout_hierarchyVisitAfter(root, function(node) { + var children = node.children; + if (children && children.length) { + node.x = d3_layout_clusterX(children); + node.y = d3_layout_clusterY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; + d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { + node.x = (node.x - root.x) * size[0]; + node.y = (root.y - node.y) * size[1]; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; + }); + return nodes; + } + cluster.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return cluster; + }; + cluster.size = function(x) { + if (!arguments.length) return nodeSize ? null : size; + nodeSize = (size = x) == null; + return cluster; + }; + cluster.nodeSize = function(x) { + if (!arguments.length) return nodeSize ? size : null; + nodeSize = (size = x) != null; + return cluster; + }; + return d3_layout_hierarchyRebind(cluster, hierarchy); + }; + function d3_layout_clusterY(children) { + return 1 + d3.max(children, function(child) { + return child.y; + }); + } + function d3_layout_clusterX(children) { + return children.reduce(function(x, child) { + return x + child.x; + }, 0) / children.length; + } + function d3_layout_clusterLeft(node) { + var children = node.children; + return children && children.length ? d3_layout_clusterLeft(children[0]) : node; + } + function d3_layout_clusterRight(node) { + var children = node.children, n; + return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; + } + d3.layout.treemap = function() { + var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5)); + function scale(children, k) { + var i = -1, n = children.length, child, area; + while (++i < n) { + area = (child = children[i]).value * (k < 0 ? 0 : k); + child.area = isNaN(area) || area <= 0 ? 0 : area; + } + } + function squarify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while ((n = remaining.length) > 0) { + row.push(child = remaining[n - 1]); + row.area += child.area; + if (mode !== "squarify" || (score = worst(row, u)) <= best) { + remaining.pop(); + best = score; + } else { + row.area -= row.pop().area; + position(row, u, rect, false); + u = Math.min(rect.dx, rect.dy); + row.length = row.area = 0; + best = Infinity; + } + } + if (row.length) { + position(row, u, rect, true); + row.length = row.area = 0; + } + children.forEach(squarify); + } + } + function stickify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), remaining = children.slice(), child, row = []; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while (child = remaining.pop()) { + row.push(child); + row.area += child.area; + if (child.z != null) { + position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); + row.length = row.area = 0; + } + } + children.forEach(stickify); + } + } + function worst(row, u) { + var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; + while (++i < n) { + if (!(r = row[i].area)) continue; + if (r < rmin) rmin = r; + if (r > rmax) rmax = r; + } + s *= s; + u *= u; + return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; + } + function position(row, u, rect, flush) { + var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; + if (u == rect.dx) { + if (flush || v > rect.dy) v = rect.dy; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dy = v; + x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); + } + o.z = true; + o.dx += rect.x + rect.dx - x; + rect.y += v; + rect.dy -= v; + } else { + if (flush || v > rect.dx) v = rect.dx; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dx = v; + y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); + } + o.z = false; + o.dy += rect.y + rect.dy - y; + rect.x += v; + rect.dx -= v; + } + } + function treemap(d) { + var nodes = stickies || hierarchy(d), root = nodes[0]; + root.x = 0; + root.y = 0; + root.dx = size[0]; + root.dy = size[1]; + if (stickies) hierarchy.revalue(root); + scale([ root ], root.dx * root.dy / root.value); + (stickies ? stickify : squarify)(root); + if (sticky) stickies = nodes; + return nodes; + } + treemap.size = function(x) { + if (!arguments.length) return size; + size = x; + return treemap; + }; + treemap.padding = function(x) { + if (!arguments.length) return padding; + function padFunction(node) { + var p = x.call(treemap, node, node.depth); + return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); + } + function padConstant(node) { + return d3_layout_treemapPad(node, x); + } + var type; + pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], + padConstant) : padConstant; + return treemap; + }; + treemap.round = function(x) { + if (!arguments.length) return round != Number; + round = x ? Math.round : Number; + return treemap; + }; + treemap.sticky = function(x) { + if (!arguments.length) return sticky; + sticky = x; + stickies = null; + return treemap; + }; + treemap.ratio = function(x) { + if (!arguments.length) return ratio; + ratio = x; + return treemap; + }; + treemap.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return treemap; + }; + return d3_layout_hierarchyRebind(treemap, hierarchy); + }; + function d3_layout_treemapPadNull(node) { + return { + x: node.x, + y: node.y, + dx: node.dx, + dy: node.dy + }; + } + function d3_layout_treemapPad(node, padding) { + var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; + if (dx < 0) { + x += dx / 2; + dx = 0; + } + if (dy < 0) { + y += dy / 2; + dy = 0; + } + return { + x: x, + y: y, + dx: dx, + dy: dy + }; + } + d3.random = { + normal: function(µ, σ) { + var n = arguments.length; + if (n < 2) σ = 1; + if (n < 1) µ = 0; + return function() { + var x, y, r; + do { + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); + }; + }, + logNormal: function() { + var random = d3.random.normal.apply(d3, arguments); + return function() { + return Math.exp(random()); + }; + }, + bates: function(m) { + var random = d3.random.irwinHall(m); + return function() { + return random() / m; + }; + }, + irwinHall: function(m) { + return function() { + for (var s = 0, j = 0; j < m; j++) s += Math.random(); + return s; + }; + } + }; + d3.scale = {}; + function d3_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [ start, stop ] : [ stop, start ]; + } + function d3_scaleRange(scale) { + return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); + } + function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { + var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); + return function(x) { + return i(u(x)); + }; + } + function d3_scale_nice(domain, nice) { + var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; + if (x1 < x0) { + dx = i0, i0 = i1, i1 = dx; + dx = x0, x0 = x1, x1 = dx; + } + domain[i0] = nice.floor(x0); + domain[i1] = nice.ceil(x1); + return domain; + } + function d3_scale_niceStep(step) { + return step ? { + floor: function(x) { + return Math.floor(x / step) * step; + }, + ceil: function(x) { + return Math.ceil(x / step) * step; + } + } : d3_scale_niceIdentity; + } + var d3_scale_niceIdentity = { + floor: d3_identity, + ceil: d3_identity + }; + function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { + var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; + if (domain[k] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + while (++j <= k) { + u.push(uninterpolate(domain[j - 1], domain[j])); + i.push(interpolate(range[j - 1], range[j])); + } + return function(x) { + var j = d3.bisect(domain, x, 1, k) - 1; + return i[j](u[j](x)); + }; + } + d3.scale.linear = function() { + return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); + }; + function d3_scale_linear(domain, range, interpolate, clamp) { + var output, input; + function rescale() { + var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; + output = linear(domain, range, uninterpolate, interpolate); + input = linear(range, domain, uninterpolate, d3_interpolate); + return scale; + } + function scale(x) { + return output(x); + } + scale.invert = function(y) { + return input(y); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.map(Number); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.rangeRound = function(x) { + return scale.range(x).interpolate(d3_interpolateRound); + }; + scale.clamp = function(x) { + if (!arguments.length) return clamp; + clamp = x; + return rescale(); + }; + scale.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x; + return rescale(); + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + scale.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + scale.nice = function(m) { + d3_scale_linearNice(domain, m); + return rescale(); + }; + scale.copy = function() { + return d3_scale_linear(domain, range, interpolate, clamp); + }; + return rescale(); + } + function d3_scale_linearRebind(scale, linear) { + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); + } + function d3_scale_linearNice(domain, m) { + return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); + } + function d3_scale_linearTickRange(domain, m) { + if (m == null) m = 10; + var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; + if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; + extent[0] = Math.ceil(extent[0] / step) * step; + extent[1] = Math.floor(extent[1] / step) * step + step * .5; + extent[2] = step; + return extent; + } + function d3_scale_linearTicks(domain, m) { + return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); + } + function d3_scale_linearTickFormat(domain, m, format) { + var range = d3_scale_linearTickRange(domain, m); + if (format) { + var match = d3_format_re.exec(format); + match.shift(); + if (match[8] === "s") { + var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); + if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); + match[8] = "f"; + format = d3.format(match.join("")); + return function(d) { + return format(prefix.scale(d)) + prefix.symbol; + }; + } + if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); + format = match.join(""); + } else { + format = ",." + d3_scale_linearPrecision(range[2]) + "f"; + } + return d3.format(format); + } + var d3_scale_linearFormatSignificant = { + s: 1, + g: 1, + p: 1, + r: 1, + e: 1 + }; + function d3_scale_linearPrecision(value) { + return -Math.floor(Math.log(value) / Math.LN10 + .01); + } + function d3_scale_linearFormatPrecision(type, range) { + var p = d3_scale_linearPrecision(range[2]); + return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2; + } + d3.scale.log = function() { + return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); + }; + function d3_scale_log(linear, base, positive, domain) { + function log(x) { + return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); + } + function pow(x) { + return positive ? Math.pow(base, x) : -Math.pow(base, -x); + } + function scale(x) { + return linear(log(x)); + } + scale.invert = function(x) { + return pow(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + positive = x[0] >= 0; + linear.domain((domain = x.map(Number)).map(log)); + return scale; + }; + scale.base = function(_) { + if (!arguments.length) return base; + base = +_; + linear.domain(domain.map(log)); + return scale; + }; + scale.nice = function() { + var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); + linear.domain(niced); + domain = niced.map(pow); + return scale; + }; + scale.ticks = function() { + var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base; + if (isFinite(j - i)) { + if (positive) { + for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); + ticks.push(pow(i)); + } else { + ticks.push(pow(i)); + for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); + } + for (i = 0; ticks[i] < u; i++) {} + for (j = ticks.length; ticks[j - 1] > v; j--) {} + ticks = ticks.slice(i, j); + } + return ticks; + }; + scale.tickFormat = function(n, format) { + if (!arguments.length) return d3_scale_logFormat; + if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); + var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, + Math.floor), e; + return function(d) { + return d / pow(f(log(d) + e)) <= k ? format(d) : ""; + }; + }; + scale.copy = function() { + return d3_scale_log(linear.copy(), base, positive, domain); + }; + return d3_scale_linearRebind(scale, linear); + } + var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { + floor: function(x) { + return -Math.ceil(-x); + }, + ceil: function(x) { + return -Math.floor(-x); + } + }; + d3.scale.pow = function() { + return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); + }; + function d3_scale_pow(linear, exponent, domain) { + var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); + function scale(x) { + return linear(powp(x)); + } + scale.invert = function(x) { + return powb(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + linear.domain((domain = x.map(Number)).map(powp)); + return scale; + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + scale.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + scale.nice = function(m) { + return scale.domain(d3_scale_linearNice(domain, m)); + }; + scale.exponent = function(x) { + if (!arguments.length) return exponent; + powp = d3_scale_powPow(exponent = x); + powb = d3_scale_powPow(1 / exponent); + linear.domain(domain.map(powp)); + return scale; + }; + scale.copy = function() { + return d3_scale_pow(linear.copy(), exponent, domain); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_scale_powPow(e) { + return function(x) { + return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); + }; + } + d3.scale.sqrt = function() { + return d3.scale.pow().exponent(.5); + }; + d3.scale.ordinal = function() { + return d3_scale_ordinal([], { + t: "range", + a: [ [] ] + }); + }; + function d3_scale_ordinal(domain, ranger) { + var index, range, rangeBand; + function scale(x) { + return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; + } + function steps(start, step) { + return d3.range(domain.length).map(function(i) { + return start + step * i; + }); + } + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = []; + index = new d3_Map(); + var i = -1, n = x.length, xi; + while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); + return scale[ranger.t].apply(scale, ranger.a); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + rangeBand = 0; + ranger = { + t: "range", + a: arguments + }; + return scale; + }; + scale.rangePoints = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding); + range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); + rangeBand = 0; + ranger = { + t: "rangePoints", + a: arguments + }; + return scale; + }; + scale.rangeBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); + range = steps(start + step * outerPadding, step); + if (reverse) range.reverse(); + rangeBand = step * (1 - padding); + ranger = { + t: "rangeBands", + a: arguments + }; + return scale; + }; + scale.rangeRoundBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; + range = steps(start + Math.round(error / 2), step); + if (reverse) range.reverse(); + rangeBand = Math.round(step * (1 - padding)); + ranger = { + t: "rangeRoundBands", + a: arguments + }; + return scale; + }; + scale.rangeBand = function() { + return rangeBand; + }; + scale.rangeExtent = function() { + return d3_scaleExtent(ranger.a[0]); + }; + scale.copy = function() { + return d3_scale_ordinal(domain, ranger); + }; + return scale.domain(domain); + } + d3.scale.category10 = function() { + return d3.scale.ordinal().range(d3_category10); + }; + d3.scale.category20 = function() { + return d3.scale.ordinal().range(d3_category20); + }; + d3.scale.category20b = function() { + return d3.scale.ordinal().range(d3_category20b); + }; + d3.scale.category20c = function() { + return d3.scale.ordinal().range(d3_category20c); + }; + var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); + var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString); + var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString); + var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString); + d3.scale.quantile = function() { + return d3_scale_quantile([], []); + }; + function d3_scale_quantile(domain, range) { + var thresholds; + function rescale() { + var k = 0, q = range.length; + thresholds = []; + while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); + return scale; + } + function scale(x) { + if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; + } + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.filter(d3_number).sort(d3_ascending); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.quantiles = function() { + return thresholds; + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; + }; + scale.copy = function() { + return d3_scale_quantile(domain, range); + }; + return rescale(); + } + d3.scale.quantize = function() { + return d3_scale_quantize(0, 1, [ 0, 1 ]); + }; + function d3_scale_quantize(x0, x1, range) { + var kx, i; + function scale(x) { + return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; + } + function rescale() { + kx = range.length / (x1 - x0); + i = range.length - 1; + return scale; + } + scale.domain = function(x) { + if (!arguments.length) return [ x0, x1 ]; + x0 = +x[0]; + x1 = +x[x.length - 1]; + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + y = y < 0 ? NaN : y / kx + x0; + return [ y, y + 1 / kx ]; + }; + scale.copy = function() { + return d3_scale_quantize(x0, x1, range); + }; + return rescale(); + } + d3.scale.threshold = function() { + return d3_scale_threshold([ .5 ], [ 0, 1 ]); + }; + function d3_scale_threshold(domain, range) { + function scale(x) { + if (x <= x) return range[d3.bisect(domain, x)]; + } + scale.domain = function(_) { + if (!arguments.length) return domain; + domain = _; + return scale; + }; + scale.range = function(_) { + if (!arguments.length) return range; + range = _; + return scale; + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + return [ domain[y - 1], domain[y] ]; + }; + scale.copy = function() { + return d3_scale_threshold(domain, range); + }; + return scale; + } + d3.scale.identity = function() { + return d3_scale_identity([ 0, 1 ]); + }; + function d3_scale_identity(domain) { + function identity(x) { + return +x; + } + identity.invert = identity; + identity.domain = identity.range = function(x) { + if (!arguments.length) return domain; + domain = x.map(identity); + return identity; + }; + identity.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + identity.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + identity.copy = function() { + return d3_scale_identity(domain); + }; + return identity; + } + d3.svg = {}; + d3.svg.arc = function() { + var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; + function arc() { + var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, + a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); + return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; + } + arc.innerRadius = function(v) { + if (!arguments.length) return innerRadius; + innerRadius = d3_functor(v); + return arc; + }; + arc.outerRadius = function(v) { + if (!arguments.length) return outerRadius; + outerRadius = d3_functor(v); + return arc; + }; + arc.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return arc; + }; + arc.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return arc; + }; + arc.centroid = function() { + var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; + return [ Math.cos(a) * r, Math.sin(a) * r ]; + }; + return arc; + }; + var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε; + function d3_svg_arcInnerRadius(d) { + return d.innerRadius; + } + function d3_svg_arcOuterRadius(d) { + return d.outerRadius; + } + function d3_svg_arcStartAngle(d) { + return d.startAngle; + } + function d3_svg_arcEndAngle(d) { + return d.endAngle; + } + function d3_svg_line(projection) { + var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; + function line(data) { + var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); + function segment() { + segments.push("M", interpolate(projection(points), tension)); + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); + } else if (points.length) { + segment(); + points = []; + } + } + if (points.length) segment(); + return segments.length ? segments.join("") : null; + } + line.x = function(_) { + if (!arguments.length) return x; + x = _; + return line; + }; + line.y = function(_) { + if (!arguments.length) return y; + y = _; + return line; + }; + line.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return line; + }; + line.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + return line; + }; + line.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return line; + }; + return line; + } + d3.svg.line = function() { + return d3_svg_line(d3_identity); + }; + var d3_svg_lineInterpolators = d3.map({ + linear: d3_svg_lineLinear, + "linear-closed": d3_svg_lineLinearClosed, + step: d3_svg_lineStep, + "step-before": d3_svg_lineStepBefore, + "step-after": d3_svg_lineStepAfter, + basis: d3_svg_lineBasis, + "basis-open": d3_svg_lineBasisOpen, + "basis-closed": d3_svg_lineBasisClosed, + bundle: d3_svg_lineBundle, + cardinal: d3_svg_lineCardinal, + "cardinal-open": d3_svg_lineCardinalOpen, + "cardinal-closed": d3_svg_lineCardinalClosed, + monotone: d3_svg_lineMonotone + }); + d3_svg_lineInterpolators.forEach(function(key, value) { + value.key = key; + value.closed = /-closed$/.test(key); + }); + function d3_svg_lineLinear(points) { + return points.join("L"); + } + function d3_svg_lineLinearClosed(points) { + return d3_svg_lineLinear(points) + "Z"; + } + function d3_svg_lineStep(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); + if (n > 1) path.push("H", p[0]); + return path.join(""); + } + function d3_svg_lineStepBefore(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); + return path.join(""); + } + function d3_svg_lineStepAfter(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); + return path.join(""); + } + function d3_svg_lineCardinalOpen(points, tension) { + return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineCardinalClosed(points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), + points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); + } + function d3_svg_lineCardinal(points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineHermite(points, tangents) { + if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { + return d3_svg_lineLinear(points); + } + var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; + if (quad) { + path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; + p0 = points[1]; + pi = 2; + } + if (tangents.length > 1) { + t = tangents[1]; + p = points[pi]; + pi++; + path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + for (var i = 2; i < tangents.length; i++, pi++) { + p = points[pi]; + t = tangents[i]; + path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + } + } + if (quad) { + var lp = points[pi]; + path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; + } + return path; + } + function d3_svg_lineCardinalTangents(points, tension) { + var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; + while (++i < n) { + p0 = p1; + p1 = p2; + p2 = points[i]; + tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); + } + return tangents; + } + function d3_svg_lineBasis(points) { + if (points.length < 3) return d3_svg_lineLinear(points); + var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; + points.push(points[n - 1]); + while (++i <= n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + points.pop(); + path.push("L", pi); + return path.join(""); + } + function d3_svg_lineBasisOpen(points) { + if (points.length < 4) return d3_svg_lineLinear(points); + var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; + while (++i < 3) { + pi = points[i]; + px.push(pi[0]); + py.push(pi[1]); + } + path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); + --i; + while (++i < n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBasisClosed(points) { + var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; + while (++i < 4) { + pi = points[i % n]; + px.push(pi[0]); + py.push(pi[1]); + } + path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; + --i; + while (++i < m) { + pi = points[i % n]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBundle(points, tension) { + var n = points.length - 1; + if (n) { + var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; + while (++i <= n) { + p = points[i]; + t = i / n; + p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); + p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); + } + } + return d3_svg_lineBasis(points); + } + function d3_svg_lineDot4(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; + } + var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; + function d3_svg_lineBasisBezier(path, x, y) { + path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); + } + function d3_svg_lineSlope(p0, p1) { + return (p1[1] - p0[1]) / (p1[0] - p0[0]); + } + function d3_svg_lineFiniteDifferences(points) { + var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); + while (++i < j) { + m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; + } + m[i] = d; + return m; + } + function d3_svg_lineMonotoneTangents(points) { + var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; + while (++i < j) { + d = d3_svg_lineSlope(points[i], points[i + 1]); + if (abs(d) < ε) { + m[i] = m[i + 1] = 0; + } else { + a = m[i] / d; + b = m[i + 1] / d; + s = a * a + b * b; + if (s > 9) { + s = d * 3 / Math.sqrt(s); + m[i] = s * a; + m[i + 1] = s * b; + } + } + } + i = -1; + while (++i <= j) { + s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); + tangents.push([ s || 0, m[i] * s || 0 ]); + } + return tangents; + } + function d3_svg_lineMonotone(points) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); + } + d3.svg.line.radial = function() { + var line = d3_svg_line(d3_svg_lineRadial); + line.radius = line.x, delete line.x; + line.angle = line.y, delete line.y; + return line; + }; + function d3_svg_lineRadial(points) { + var point, i = -1, n = points.length, r, a; + while (++i < n) { + point = points[i]; + r = point[0]; + a = point[1] + d3_svg_arcOffset; + point[0] = r * Math.cos(a); + point[1] = r * Math.sin(a); + } + return points; + } + function d3_svg_area(projection) { + var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; + function area(data) { + var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { + return x; + } : d3_functor(x1), fy1 = y0 === y1 ? function() { + return y; + } : d3_functor(y1), x, y; + function segment() { + segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); + points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); + } else if (points0.length) { + segment(); + points0 = []; + points1 = []; + } + } + if (points0.length) segment(); + return segments.length ? segments.join("") : null; + } + area.x = function(_) { + if (!arguments.length) return x1; + x0 = x1 = _; + return area; + }; + area.x0 = function(_) { + if (!arguments.length) return x0; + x0 = _; + return area; + }; + area.x1 = function(_) { + if (!arguments.length) return x1; + x1 = _; + return area; + }; + area.y = function(_) { + if (!arguments.length) return y1; + y0 = y1 = _; + return area; + }; + area.y0 = function(_) { + if (!arguments.length) return y0; + y0 = _; + return area; + }; + area.y1 = function(_) { + if (!arguments.length) return y1; + y1 = _; + return area; + }; + area.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return area; + }; + area.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + interpolateReverse = interpolate.reverse || interpolate; + L = interpolate.closed ? "M" : "L"; + return area; + }; + area.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return area; + }; + return area; + } + d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; + d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; + d3.svg.area = function() { + return d3_svg_area(d3_identity); + }; + d3.svg.area.radial = function() { + var area = d3_svg_area(d3_svg_lineRadial); + area.radius = area.x, delete area.x; + area.innerRadius = area.x0, delete area.x0; + area.outerRadius = area.x1, delete area.x1; + area.angle = area.y, delete area.y; + area.startAngle = area.y0, delete area.y0; + area.endAngle = area.y1, delete area.y1; + return area; + }; + d3.svg.chord = function() { + var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; + function chord(d, i) { + var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); + return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; + } + function subgroup(self, f, d, i) { + var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; + return { + r: r, + a0: a0, + a1: a1, + p0: [ r * Math.cos(a0), r * Math.sin(a0) ], + p1: [ r * Math.cos(a1), r * Math.sin(a1) ] + }; + } + function equals(a, b) { + return a.a0 == b.a0 && a.a1 == b.a1; + } + function arc(r, p, a) { + return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; + } + function curve(r0, p0, r1, p1) { + return "Q 0,0 " + p1; + } + chord.radius = function(v) { + if (!arguments.length) return radius; + radius = d3_functor(v); + return chord; + }; + chord.source = function(v) { + if (!arguments.length) return source; + source = d3_functor(v); + return chord; + }; + chord.target = function(v) { + if (!arguments.length) return target; + target = d3_functor(v); + return chord; + }; + chord.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return chord; + }; + chord.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return chord; + }; + return chord; + }; + function d3_svg_chordRadius(d) { + return d.radius; + } + d3.svg.diagonal = function() { + var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; + function diagonal(d, i) { + var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { + x: p0.x, + y: m + }, { + x: p3.x, + y: m + }, p3 ]; + p = p.map(projection); + return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; + } + diagonal.source = function(x) { + if (!arguments.length) return source; + source = d3_functor(x); + return diagonal; + }; + diagonal.target = function(x) { + if (!arguments.length) return target; + target = d3_functor(x); + return diagonal; + }; + diagonal.projection = function(x) { + if (!arguments.length) return projection; + projection = x; + return diagonal; + }; + return diagonal; + }; + function d3_svg_diagonalProjection(d) { + return [ d.x, d.y ]; + } + d3.svg.diagonal.radial = function() { + var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; + diagonal.projection = function(x) { + return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; + }; + return diagonal; + }; + function d3_svg_diagonalRadialProjection(projection) { + return function() { + var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; + return [ r * Math.cos(a), r * Math.sin(a) ]; + }; + } + d3.svg.symbol = function() { + var type = d3_svg_symbolType, size = d3_svg_symbolSize; + function symbol(d, i) { + return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); + } + symbol.type = function(x) { + if (!arguments.length) return type; + type = d3_functor(x); + return symbol; + }; + symbol.size = function(x) { + if (!arguments.length) return size; + size = d3_functor(x); + return symbol; + }; + return symbol; + }; + function d3_svg_symbolSize() { + return 64; + } + function d3_svg_symbolType() { + return "circle"; + } + function d3_svg_symbolCircle(size) { + var r = Math.sqrt(size / π); + return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; + } + var d3_svg_symbols = d3.map({ + circle: d3_svg_symbolCircle, + cross: function(size) { + var r = Math.sqrt(size / 5) / 2; + return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; + }, + diamond: function(size) { + var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; + return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; + }, + square: function(size) { + var r = Math.sqrt(size) / 2; + return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; + }, + "triangle-down": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; + }, + "triangle-up": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; + } + }); + d3.svg.symbolTypes = d3_svg_symbols.keys(); + var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); + function d3_transition(groups, id) { + d3_subclass(groups, d3_transitionPrototype); + groups.id = id; + return groups; + } + var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; + d3_transitionPrototype.call = d3_selectionPrototype.call; + d3_transitionPrototype.empty = d3_selectionPrototype.empty; + d3_transitionPrototype.node = d3_selectionPrototype.node; + d3_transitionPrototype.size = d3_selectionPrototype.size; + d3.transition = function(selection) { + return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition(); + }; + d3.transition.prototype = d3_transitionPrototype; + d3_transitionPrototype.select = function(selector) { + var id = this.id, subgroups = [], subgroup, subnode, node; + selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + d3_transitionNode(subnode, i, id, node.__transition__[id]); + subgroup.push(subnode); + } else { + subgroup.push(null); + } + } + } + return d3_transition(subgroups, id); + }; + d3_transitionPrototype.selectAll = function(selector) { + var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition; + selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + transition = node.__transition__[id]; + subnodes = selector.call(node, node.__data__, i, j); + subgroups.push(subgroup = []); + for (var k = -1, o = subnodes.length; ++k < o; ) { + if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition); + subgroup.push(subnode); + } + } + } + } + return d3_transition(subgroups, id); + }; + d3_transitionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node); + } + } + } + return d3_transition(subgroups, this.id); + }; + d3_transitionPrototype.tween = function(name, tween) { + var id = this.id; + if (arguments.length < 2) return this.node().__transition__[id].tween.get(name); + return d3_selection_each(this, tween == null ? function(node) { + node.__transition__[id].tween.remove(name); + } : function(node) { + node.__transition__[id].tween.set(name, tween); + }); + }; + function d3_transition_tween(groups, name, value, tween) { + var id = groups.id; + return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { + node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j))); + } : (value = tween(value), function(node) { + node.__transition__[id].tween.set(name, value); + })); + } + d3_transitionPrototype.attr = function(nameNS, value) { + if (arguments.length < 2) { + for (value in nameNS) this.attr(value, nameNS[value]); + return this; + } + var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); + function attrNull() { + this.removeAttribute(name); + } + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + function attrTween(b) { + return b == null ? attrNull : (b += "", function() { + var a = this.getAttribute(name), i; + return a !== b && (i = interpolate(a, b), function(t) { + this.setAttribute(name, i(t)); + }); + }); + } + function attrTweenNS(b) { + return b == null ? attrNullNS : (b += "", function() { + var a = this.getAttributeNS(name.space, name.local), i; + return a !== b && (i = interpolate(a, b), function(t) { + this.setAttributeNS(name.space, name.local, i(t)); + }); + }); + } + return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); + }; + d3_transitionPrototype.attrTween = function(nameNS, tween) { + var name = d3.ns.qualify(nameNS); + function attrTween(d, i) { + var f = tween.call(this, d, i, this.getAttribute(name)); + return f && function(t) { + this.setAttribute(name, f(t)); + }; + } + function attrTweenNS(d, i) { + var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); + return f && function(t) { + this.setAttributeNS(name.space, name.local, f(t)); + }; + } + return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); + }; + d3_transitionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.style(priority, name[priority], value); + return this; + } + priority = ""; + } + function styleNull() { + this.style.removeProperty(name); + } + function styleString(b) { + return b == null ? styleNull : (b += "", function() { + var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i; + return a !== b && (i = d3_interpolate(a, b), function(t) { + this.style.setProperty(name, i(t), priority); + }); + }); + } + return d3_transition_tween(this, "style." + name, value, styleString); + }; + d3_transitionPrototype.styleTween = function(name, tween, priority) { + if (arguments.length < 3) priority = ""; + function styleTween(d, i) { + var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name)); + return f && function(t) { + this.style.setProperty(name, f(t), priority); + }; + } + return this.tween("style." + name, styleTween); + }; + d3_transitionPrototype.text = function(value) { + return d3_transition_tween(this, "text", value, d3_transition_text); + }; + function d3_transition_text(b) { + if (b == null) b = ""; + return function() { + this.textContent = b; + }; + } + d3_transitionPrototype.remove = function() { + return this.each("end.transition", function() { + var p; + if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this); + }); + }; + d3_transitionPrototype.ease = function(value) { + var id = this.id; + if (arguments.length < 1) return this.node().__transition__[id].ease; + if (typeof value !== "function") value = d3.ease.apply(d3, arguments); + return d3_selection_each(this, function(node) { + node.__transition__[id].ease = value; + }); + }; + d3_transitionPrototype.delay = function(value) { + var id = this.id; + if (arguments.length < 1) return this.node().__transition__[id].delay; + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node.__transition__[id].delay = +value.call(node, node.__data__, i, j); + } : (value = +value, function(node) { + node.__transition__[id].delay = value; + })); + }; + d3_transitionPrototype.duration = function(value) { + var id = this.id; + if (arguments.length < 1) return this.node().__transition__[id].duration; + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); + } : (value = Math.max(1, value), function(node) { + node.__transition__[id].duration = value; + })); + }; + d3_transitionPrototype.each = function(type, listener) { + var id = this.id; + if (arguments.length < 2) { + var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; + d3_transitionInheritId = id; + d3_selection_each(this, function(node, i, j) { + d3_transitionInherit = node.__transition__[id]; + type.call(node, node.__data__, i, j); + }); + d3_transitionInherit = inherit; + d3_transitionInheritId = inheritId; + } else { + d3_selection_each(this, function(node) { + var transition = node.__transition__[id]; + (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener); + }); + } + return this; + }; + d3_transitionPrototype.transition = function() { + var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition; + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if (node = group[i]) { + transition = Object.create(node.__transition__[id0]); + transition.delay += transition.duration; + d3_transitionNode(node, i, id1, transition); + } + subgroup.push(node); + } + } + return d3_transition(subgroups, id1); + }; + function d3_transitionNode(node, i, id, inherit) { + var lock = node.__transition__ || (node.__transition__ = { + active: 0, + count: 0 + }), transition = lock[id]; + if (!transition) { + var time = inherit.time; + transition = lock[id] = { + tween: new d3_Map(), + time: time, + ease: inherit.ease, + delay: inherit.delay, + duration: inherit.duration + }; + ++lock.count; + d3.timer(function(elapsed) { + var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = []; + timer.t = delay + time; + if (delay <= elapsed) return start(elapsed - delay); + timer.c = start; + function start(elapsed) { + if (lock.active > id) return stop(); + lock.active = id; + transition.event && transition.event.start.call(node, d, i); + transition.tween.forEach(function(key, value) { + if (value = value.call(node, d, i)) { + tweened.push(value); + } + }); + d3.timer(function() { + timer.c = tick(elapsed || 1) ? d3_true : tick; + return 1; + }, 0, time); + } + function tick(elapsed) { + if (lock.active !== id) return stop(); + var t = elapsed / duration, e = ease(t), n = tweened.length; + while (n > 0) { + tweened[--n].call(node, e); + } + if (t >= 1) { + transition.event && transition.event.end.call(node, d, i); + return stop(); + } + } + function stop() { + if (--lock.count) delete lock[id]; else delete node.__transition__; + return 1; + } + }, 0, time); + } + } + d3.svg.axis = function() { + var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; + function axis(g) { + g.each(function() { + var g = d3.select(this); + var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); + var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform; + var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), + d3.transition(path)); + tickEnter.append("line"); + tickEnter.append("text"); + var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); + switch (orient) { + case "bottom": + { + tickTransform = d3_svg_axisX; + lineEnter.attr("y2", innerTickSize); + textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding); + lineUpdate.attr("x2", 0).attr("y2", innerTickSize); + textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding); + text.attr("dy", ".71em").style("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize); + break; + } + + case "top": + { + tickTransform = d3_svg_axisX; + lineEnter.attr("y2", -innerTickSize); + textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); + lineUpdate.attr("x2", 0).attr("y2", -innerTickSize); + textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding)); + text.attr("dy", "0em").style("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize); + break; + } + + case "left": + { + tickTransform = d3_svg_axisY; + lineEnter.attr("x2", -innerTickSize); + textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)); + lineUpdate.attr("x2", -innerTickSize).attr("y2", 0); + textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0); + text.attr("dy", ".32em").style("text-anchor", "end"); + pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize); + break; + } + + case "right": + { + tickTransform = d3_svg_axisY; + lineEnter.attr("x2", innerTickSize); + textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding); + lineUpdate.attr("x2", innerTickSize).attr("y2", 0); + textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0); + text.attr("dy", ".32em").style("text-anchor", "start"); + pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize); + break; + } + } + if (scale1.rangeBand) { + var x = scale1, dx = x.rangeBand() / 2; + scale0 = scale1 = function(d) { + return x(d) + dx; + }; + } else if (scale0.rangeBand) { + scale0 = scale1; + } else { + tickExit.call(tickTransform, scale1); + } + tickEnter.call(tickTransform, scale0); + tickUpdate.call(tickTransform, scale1); + }); + } + axis.scale = function(x) { + if (!arguments.length) return scale; + scale = x; + return axis; + }; + axis.orient = function(x) { + if (!arguments.length) return orient; + orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; + return axis; + }; + axis.ticks = function() { + if (!arguments.length) return tickArguments_; + tickArguments_ = arguments; + return axis; + }; + axis.tickValues = function(x) { + if (!arguments.length) return tickValues; + tickValues = x; + return axis; + }; + axis.tickFormat = function(x) { + if (!arguments.length) return tickFormat_; + tickFormat_ = x; + return axis; + }; + axis.tickSize = function(x) { + var n = arguments.length; + if (!n) return innerTickSize; + innerTickSize = +x; + outerTickSize = +arguments[n - 1]; + return axis; + }; + axis.innerTickSize = function(x) { + if (!arguments.length) return innerTickSize; + innerTickSize = +x; + return axis; + }; + axis.outerTickSize = function(x) { + if (!arguments.length) return outerTickSize; + outerTickSize = +x; + return axis; + }; + axis.tickPadding = function(x) { + if (!arguments.length) return tickPadding; + tickPadding = +x; + return axis; + }; + axis.tickSubdivide = function() { + return arguments.length && axis; + }; + return axis; + }; + var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { + top: 1, + right: 1, + bottom: 1, + left: 1 + }; + function d3_svg_axisX(selection, x) { + selection.attr("transform", function(d) { + return "translate(" + x(d) + ",0)"; + }); + } + function d3_svg_axisY(selection, y) { + selection.attr("transform", function(d) { + return "translate(0," + y(d) + ")"; + }); + } + d3.svg.brush = function() { + var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0]; + function brush(g) { + g.each(function() { + var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); + var background = g.selectAll(".background").data([ 0 ]); + background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); + g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); + var resize = g.selectAll(".resize").data(resizes, d3_identity); + resize.exit().remove(); + resize.enter().append("g").attr("class", function(d) { + return "resize " + d; + }).style("cursor", function(d) { + return d3_svg_brushCursor[d]; + }).append("rect").attr("x", function(d) { + return /[ew]$/.test(d) ? -3 : null; + }).attr("y", function(d) { + return /^[ns]/.test(d) ? -3 : null; + }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); + resize.style("display", brush.empty() ? "none" : null); + var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; + if (x) { + range = d3_scaleRange(x); + backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); + redrawX(gUpdate); + } + if (y) { + range = d3_scaleRange(y); + backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); + redrawY(gUpdate); + } + redraw(gUpdate); + }); + } + brush.event = function(g) { + g.each(function() { + var event_ = event.of(this, arguments), extent1 = { + x: xExtent, + y: yExtent, + i: xExtentDomain, + j: yExtentDomain + }, extent0 = this.__chart__ || extent1; + this.__chart__ = extent1; + if (d3_transitionInheritId) { + d3.select(this).transition().each("start.brush", function() { + xExtentDomain = extent0.i; + yExtentDomain = extent0.j; + xExtent = extent0.x; + yExtent = extent0.y; + event_({ + type: "brushstart" + }); + }).tween("brush:brush", function() { + var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); + xExtentDomain = yExtentDomain = null; + return function(t) { + xExtent = extent1.x = xi(t); + yExtent = extent1.y = yi(t); + event_({ + type: "brush", + mode: "resize" + }); + }; + }).each("end.brush", function() { + xExtentDomain = extent1.i; + yExtentDomain = extent1.j; + event_({ + type: "brush", + mode: "resize" + }); + event_({ + type: "brushend" + }); + }); + } else { + event_({ + type: "brushstart" + }); + event_({ + type: "brush", + mode: "resize" + }); + event_({ + type: "brushend" + }); + } + }); + }; + function redraw(g) { + g.selectAll(".resize").attr("transform", function(d) { + return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; + }); + } + function redrawX(g) { + g.select(".extent").attr("x", xExtent[0]); + g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); + } + function redrawY(g) { + g.select(".extent").attr("y", yExtent[0]); + g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); + } + function brushstart() { + var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset; + var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup); + if (d3.event.changedTouches) { + w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); + } else { + w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); + } + g.interrupt().selectAll("*").interrupt(); + if (dragging) { + origin[0] = xExtent[0] - origin[0]; + origin[1] = yExtent[0] - origin[1]; + } else if (resizing) { + var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); + offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; + origin[0] = xExtent[ex]; + origin[1] = yExtent[ey]; + } else if (d3.event.altKey) center = origin.slice(); + g.style("pointer-events", "none").selectAll(".resize").style("display", null); + d3.select("body").style("cursor", eventTarget.style("cursor")); + event_({ + type: "brushstart" + }); + brushmove(); + function keydown() { + if (d3.event.keyCode == 32) { + if (!dragging) { + center = null; + origin[0] -= xExtent[1]; + origin[1] -= yExtent[1]; + dragging = 2; + } + d3_eventPreventDefault(); + } + } + function keyup() { + if (d3.event.keyCode == 32 && dragging == 2) { + origin[0] += xExtent[1]; + origin[1] += yExtent[1]; + dragging = 0; + d3_eventPreventDefault(); + } + } + function brushmove() { + var point = d3.mouse(target), moved = false; + if (offset) { + point[0] += offset[0]; + point[1] += offset[1]; + } + if (!dragging) { + if (d3.event.altKey) { + if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; + origin[0] = xExtent[+(point[0] < center[0])]; + origin[1] = yExtent[+(point[1] < center[1])]; + } else center = null; + } + if (resizingX && move1(point, x, 0)) { + redrawX(g); + moved = true; + } + if (resizingY && move1(point, y, 1)) { + redrawY(g); + moved = true; + } + if (moved) { + redraw(g); + event_({ + type: "brush", + mode: dragging ? "move" : "resize" + }); + } + } + function move1(point, scale, i) { + var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max; + if (dragging) { + r0 -= position; + r1 -= size + position; + } + min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; + if (dragging) { + max = (min += position) + size; + } else { + if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); + if (position < min) { + max = min; + min = position; + } else { + max = position; + } + } + if (extent[0] != min || extent[1] != max) { + if (i) yExtentDomain = null; else xExtentDomain = null; + extent[0] = min; + extent[1] = max; + return true; + } + } + function brushend() { + brushmove(); + g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); + d3.select("body").style("cursor", null); + w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); + dragRestore(); + event_({ + type: "brushend" + }); + } + } + brush.x = function(z) { + if (!arguments.length) return x; + x = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.y = function(z) { + if (!arguments.length) return y; + y = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.clamp = function(z) { + if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; + if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; + return brush; + }; + brush.extent = function(z) { + var x0, x1, y0, y1, t; + if (!arguments.length) { + if (x) { + if (xExtentDomain) { + x0 = xExtentDomain[0], x1 = xExtentDomain[1]; + } else { + x0 = xExtent[0], x1 = xExtent[1]; + if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + } + } + if (y) { + if (yExtentDomain) { + y0 = yExtentDomain[0], y1 = yExtentDomain[1]; + } else { + y0 = yExtent[0], y1 = yExtent[1]; + if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + } + } + return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; + } + if (x) { + x0 = z[0], x1 = z[1]; + if (y) x0 = x0[0], x1 = x1[0]; + xExtentDomain = [ x0, x1 ]; + if (x.invert) x0 = x(x0), x1 = x(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; + } + if (y) { + y0 = z[0], y1 = z[1]; + if (x) y0 = y0[1], y1 = y1[1]; + yExtentDomain = [ y0, y1 ]; + if (y.invert) y0 = y(y0), y1 = y(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; + } + return brush; + }; + brush.clear = function() { + if (!brush.empty()) { + xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; + xExtentDomain = yExtentDomain = null; + } + return brush; + }; + brush.empty = function() { + return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; + }; + return d3.rebind(brush, event, "on"); + }; + var d3_svg_brushCursor = { + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" + }; + var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; + var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; + var d3_time_formatUtc = d3_time_format.utc; + var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); + d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; + function d3_time_formatIsoNative(date) { + return date.toISOString(); + } + d3_time_formatIsoNative.parse = function(string) { + var date = new Date(string); + return isNaN(date) ? null : date; + }; + d3_time_formatIsoNative.toString = d3_time_formatIso.toString; + d3_time.second = d3_time_interval(function(date) { + return new d3_date(Math.floor(date / 1e3) * 1e3); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 1e3); + }, function(date) { + return date.getSeconds(); + }); + d3_time.seconds = d3_time.second.range; + d3_time.seconds.utc = d3_time.second.utc.range; + d3_time.minute = d3_time_interval(function(date) { + return new d3_date(Math.floor(date / 6e4) * 6e4); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 6e4); + }, function(date) { + return date.getMinutes(); + }); + d3_time.minutes = d3_time.minute.range; + d3_time.minutes.utc = d3_time.minute.utc.range; + d3_time.hour = d3_time_interval(function(date) { + var timezone = date.getTimezoneOffset() / 60; + return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 36e5); + }, function(date) { + return date.getHours(); + }); + d3_time.hours = d3_time.hour.range; + d3_time.hours.utc = d3_time.hour.utc.range; + d3_time.month = d3_time_interval(function(date) { + date = d3_time.day(date); + date.setDate(1); + return date; + }, function(date, offset) { + date.setMonth(date.getMonth() + offset); + }, function(date) { + return date.getMonth(); + }); + d3_time.months = d3_time.month.range; + d3_time.months.utc = d3_time.month.utc.range; + function d3_time_scale(linear, methods, format) { + function scale(x) { + return linear(x); + } + scale.invert = function(x) { + return d3_time_scaleDate(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(d3_time_scaleDate); + linear.domain(x); + return scale; + }; + function tickMethod(extent, count) { + var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); + return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { + return d / 31536e6; + }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i]; + } + scale.nice = function(interval, skip) { + var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); + if (method) interval = method[0], skip = method[1]; + function skipped(date) { + return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; + } + return scale.domain(d3_scale_nice(domain, skip > 1 ? { + floor: function(date) { + while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); + return date; + }, + ceil: function(date) { + while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); + return date; + } + } : interval)); + }; + scale.ticks = function(interval, skip) { + var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { + range: interval + }, skip ]; + if (method) interval = method[0], skip = method[1]; + return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); + }; + scale.tickFormat = function() { + return format; + }; + scale.copy = function() { + return d3_time_scale(linear.copy(), methods, format); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_time_scaleDate(t) { + return new Date(t); + } + var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; + var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ]; + var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { + return d.getMilliseconds(); + } ], [ ":%S", function(d) { + return d.getSeconds(); + } ], [ "%I:%M", function(d) { + return d.getMinutes(); + } ], [ "%I %p", function(d) { + return d.getHours(); + } ], [ "%a %d", function(d) { + return d.getDay() && d.getDate() != 1; + } ], [ "%b %d", function(d) { + return d.getDate() != 1; + } ], [ "%B", function(d) { + return d.getMonth(); + } ], [ "%Y", d3_true ] ]); + var d3_time_scaleMilliseconds = { + range: function(start, stop, step) { + return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); + }, + floor: d3_identity, + ceil: d3_identity + }; + d3_time_scaleLocalMethods.year = d3_time.year; + d3_time.scale = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); + }; + var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { + return [ m[0].utc, m[1] ]; + }); + var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { + return d.getUTCMilliseconds(); + } ], [ ":%S", function(d) { + return d.getUTCSeconds(); + } ], [ "%I:%M", function(d) { + return d.getUTCMinutes(); + } ], [ "%I %p", function(d) { + return d.getUTCHours(); + } ], [ "%a %d", function(d) { + return d.getUTCDay() && d.getUTCDate() != 1; + } ], [ "%b %d", function(d) { + return d.getUTCDate() != 1; + } ], [ "%B", function(d) { + return d.getUTCMonth(); + } ], [ "%Y", d3_true ] ]); + d3_time_scaleUtcMethods.year = d3_time.year.utc; + d3_time.scale.utc = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); + }; + d3.text = d3_xhrType(function(request) { + return request.responseText; + }); + d3.json = function(url, callback) { + return d3_xhr(url, "application/json", d3_json, callback); + }; + function d3_json(request) { + return JSON.parse(request.responseText); + } + d3.html = function(url, callback) { + return d3_xhr(url, "text/html", d3_html, callback); + }; + function d3_html(request) { + var range = d3_document.createRange(); + range.selectNode(d3_document.body); + return range.createContextualFragment(request.responseText); + } + d3.xml = d3_xhrType(function(request) { + return request.responseXML; + }); + if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; + this.d3 = d3; +}(); \ No newline at end of file diff --git a/static/js/libs/d3.min.js b/static/js/libs/d3.min.js new file mode 100644 index 00000000..88550ae5 --- /dev/null +++ b/static/js/libs/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ia+n in this}function c(n){return n=ia+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===oa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===oa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=aa.length;r>e;++e){var u=aa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Zo.event.preventDefault()}function x(){for(var n,t=Zo.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Zo.event;u.target=n,Zo.event=u,t[u.type].apply(e,r)}finally{Zo.event=i}}},t}function _(n){return sa(n,pa),n}function b(n){return"function"==typeof n?n:function(){return la(n,this)}}function w(n){return"function"==typeof n?n:function(){return fa(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Zo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Zo.requote(n)+"(?:\\s+|$)","g")}function A(n){return(n+"").trim().split(/^|\s+/)}function C(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=A(n).map(N);var u=n.length;return"function"==typeof t?r:e}function N(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function z(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function L(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function T(n){return"function"==typeof n?n:(n=Zo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function q(n){return{__data__:n}}function R(n){return function(){return ga(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,da),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Xo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Zo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.substring(0,a));var s=ya.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Zo.event;Zo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Zo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Ma,t="click"+n,e=Zo.select(Wo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(xa){var r=Bo.style,u=r[xa];r[xa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),xa&&(r[xa]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>_a&&(Wo.scrollX||Wo.scrollY)){e=Zo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();_a=!(u.f||u.e),e.remove()}return _a?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Zo.event.changedTouches[0].identifier}function X(){return Zo.event.target}function $(){return Wo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?ba:Math.acos(n)}function G(n){return n>1?Sa:-1>n?-Sa:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?st(n.l,n.a,n.b):st((n=xt((n=Zo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Aa)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=lt(u)*ja,r=lt(r)*Ha,i=lt(i)*Fa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function st(n,t,e){return n>0?new it(Math.atan2(e,t)*Ca,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function lt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Ia.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/ja),u=ft((.2126729*n+.7151522*t+.072175*e)/Ha),i=ft((.0193339*n+.119192*t+.9503041*e)/Fa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Zo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Wo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Zo.event;Zo.event=n;try{o.progress.call(i,c)}finally{Zo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Xo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Zo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(){var n=Ct(),t=Nt()-n;t>24?(isFinite(t)&&(clearTimeout($a),$a=setTimeout(At,t)),Xa=0):(Xa=1,Wa(At))}function Ct(){var n=Date.now();for(Ba=Za;Ba;)n>=Ba.t&&(Ba.f=Ba.c(n-Ba.t)),Ba=Ba.n;return n}function Nt(){for(var n,t=Za,e=1/0;t;)t.f?t=n?n.n=t.n:Za=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Va=n,e}function zt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Lt(n,t){var e=Math.pow(10,3*ua(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ga.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Ka.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Zo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function Rt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Dt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new nc(e-1)),1),e}function i(n,e){return t(n=new nc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{nc=Rt;var r=new Rt;return r._=n,o(r,t,e)}finally{nc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Pt(n);return c.floor=c,c.round=Pt(r),c.ceil=Pt(u),c.offset=Pt(i),c.range=a,n}function Pt(n){return function(t,e){try{nc=Rt;var r=new Rt;return r._=t,n(r,e)._}finally{nc=Date}}}function Ut(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=ec[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&nc!==Rt,o=new(i?Rt:nc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in ec?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{nc=Rt;var t=new nc;return t._=n,r(t)}finally{nc=Date}}var r=t(n);return e.parse=function(n){try{nc=Rt;var t=r.parse(n);return t&&t._}finally{nc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=re;var x=Zo.map(),M=Ht(v),_=Ft(v),b=Ht(d),w=Ft(d),S=Ht(m),k=Ft(m),E=Ht(y),A=Ft(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return jt(n.getDate(),t,2)},e:function(n,t){return jt(n.getDate(),t,2)},H:function(n,t){return jt(n.getHours(),t,2)},I:function(n,t){return jt(n.getHours()%12||12,t,2)},j:function(n,t){return jt(1+Qa.dayOfYear(n),t,3)},L:function(n,t){return jt(n.getMilliseconds(),t,3)},m:function(n,t){return jt(n.getMonth()+1,t,2)},M:function(n,t){return jt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return jt(n.getSeconds(),t,2)},U:function(n,t){return jt(Qa.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return jt(Qa.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return jt(n.getFullYear()%100,t,2)},Y:function(n,t){return jt(n.getFullYear()%1e4,t,4)},Z:te,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Wt,e:Wt,H:Gt,I:Gt,j:Jt,L:ne,m:Bt,M:Kt,p:l,S:Qt,U:Yt,w:Ot,W:It,x:c,X:s,y:Vt,Y:Zt,Z:Xt,"%":ee};return t}function jt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ht(n){return new RegExp("^(?:"+n.map(Zo.requote).join("|")+")","i")}function Ft(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Ot(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Yt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function It(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Zt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Vt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.y=$t(+r[0]),e+r[0].length):-1}function Xt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=-t,e+5):-1}function $t(n){return n+(n>68?1900:2e3)}function Bt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Wt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Jt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Gt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Kt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Qt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ne(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function te(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(ua(t)/60),u=ua(t)%60;return e+jt(r,"0",2)+jt(u,"0",2)}function ee(n,t,e){uc.lastIndex=0;var r=uc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function re(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ue(){}function ie(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function oe(n,t){n&&cc.hasOwnProperty(n.type)&&cc[n.type](n,t)}function ae(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ce(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)ae(n[e],t,1);t.polygonEnd()}function se(){function n(n,t){n*=Aa,t=t*Aa/2+ba/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);lc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;fc.point=function(o,a){fc.point=n,r=(t=o)*Aa,u=Math.cos(a=(e=a)*Aa/2+ba/4),i=Math.sin(a)},fc.lineEnd=function(){n(t,e)}}function le(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function fe(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function he(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ge(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function pe(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function ve(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function de(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function me(n,t){return ua(n[0]-t[0])<ka&&ua(n[1]-t[1])<ka}function ye(n,t){n*=Aa;var e=Math.cos(t*=Aa);xe(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function xe(n,t,e){++hc,pc+=(n-pc)/hc,vc+=(t-vc)/hc,dc+=(e-dc)/hc}function Me(){function n(n,u){n*=Aa;var i=Math.cos(u*=Aa),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);gc+=s,mc+=s*(t+(t=o)),yc+=s*(e+(e=a)),xc+=s*(r+(r=c)),xe(t,e,r)}var t,e,r;wc.point=function(u,i){u*=Aa;var o=Math.cos(i*=Aa);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),wc.point=n,xe(t,e,r)}}function _e(){wc.point=ye}function be(){function n(n,t){n*=Aa;var e=Math.cos(t*=Aa),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-J(g)/h,v=Math.atan2(h,g);Mc+=p*s,_c+=p*l,bc+=p*f,gc+=v,mc+=v*(r+(r=o)),yc+=v*(u+(u=a)),xc+=v*(i+(i=c)),xe(r,u,i)}var t,e,r,u,i;wc.point=function(o,a){t=o,e=a,wc.point=n,o*=Aa;var c=Math.cos(a*=Aa);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),xe(r,u,i)},wc.lineEnd=function(){n(t,e),wc.lineEnd=_e,wc.point=ye}}function we(){return!0}function Se(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(me(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ee(e,n,null,!0),s=new Ee(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Ee(r,n,null,!1),s=new Ee(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),ke(i),ke(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ke(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Ee(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ae(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ce))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Zo.merge(g);var n=Le(m,p);g.length?(_||(i.polygonStart(),_=!0),Se(g,ze,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ne(),M=t(x),_=!1;return y}}function Ce(n){return n.length>1}function Ne(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function ze(n,t){return((n=n.x)[0]<0?n[1]-Sa-ka:Sa-n[1])-((t=t.x)[0]<0?t[1]-Sa-ka:Sa-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;lc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+ba/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+ba/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>ba,k=p*x;if(lc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*wa:_,S^h>=e^m>=e){var E=he(le(f),le(n));ve(E);var A=he(u,E);ve(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-ka>i||ka>i&&0>lc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?ba:-ba,c=ua(i-e);ua(c-ba)<ka?(n.point(e,r=(r+o)/2>0?Sa:-Sa),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=ba&&(ua(e-u)<ka&&(e-=u*ka),ua(i-a)<ka&&(i-=a*ka),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return ua(o)>ka?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*Sa,r.point(-ba,u),r.point(0,u),r.point(ba,u),r.point(ba,0),r.point(ba,-u),r.point(0,-u),r.point(-ba,-u),r.point(-ba,0),r.point(-ba,u);else if(ua(n[0]-t[0])>ka){var i=n[0]<t[0]?ba:-ba;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function De(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?ba:-ba),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(me(e,g)||me(p,g))&&(p[0]+=ka,p[1]+=ka,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&me(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=le(n),u=le(t),o=[1,0,0],a=he(r,u),c=fe(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=he(o,a),p=pe(o,f),v=pe(a,h);ge(p,v);var d=g,m=fe(p,d),y=fe(d,d),x=m*m-y*(fe(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=pe(d,(-m-M)/y);if(ge(_,p),_=de(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ua(A-ba)<ka,N=C||ka>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ua(_[0]-w)<ka?k:E):k<=_[1]&&_[1]<=E:A>ba^(w<=_[0]&&_[0]<=S)){var z=pe(d,(-m+M)/y);return ge(z,p),[_,de(z)]}}}function u(t,e){var r=o?n:ba-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ua(i)>ka,c=sr(n,6*Aa);return Ae(t,e,c,o?[0,-n]:[-ba,n-ba])}function Pe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Ue(n,t,e,r){function u(r,u){return ua(r[0]-n)<ka?u>0?0:3:ua(r[0]-e)<ka?u>0?2:1:ua(r[1]-t)<ka?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&W(s,i,n)>0&&++t:i[1]<=r&&W(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-kc,Math.min(kc,n)),t=Math.max(-kc,Math.min(kc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ne(),C=Pe(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Zo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Se(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function je(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function He(n){var t=0,e=ba/3,r=tr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*ba/180,e=n[1]*ba/180):[180*(t/ba),180*(e/ba)]},u}function Fe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Oe(){function n(n,t){Ac+=u*n-r*t,r=n,u=t}var t,e,r,u;Tc.point=function(i,o){Tc.point=n,t=r=i,e=u=o},Tc.lineEnd=function(){n(t,e)}}function Ye(n,t){Cc>n&&(Cc=n),n>zc&&(zc=n),Nc>t&&(Nc=t),t>Lc&&(Lc=t)}function Ie(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ze(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ze(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ze(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ve(n,t){pc+=n,vc+=t,++dc}function Xe(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);mc+=o*(t+n)/2,yc+=o*(e+r)/2,xc+=o,Ve(t=n,e=r)}var t,e;Rc.point=function(r,u){Rc.point=n,Ve(t=r,e=u)}}function $e(){Rc.point=Ve}function Be(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);mc+=o*(r+n)/2,yc+=o*(u+t)/2,xc+=o,o=u*n-r*t,Mc+=o*(r+n),_c+=o*(u+t),bc+=3*o,Ve(r=n,u=t)}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,Ve(t=r=i,e=u=o)},Rc.lineEnd=function(){n(t,e)}}function We(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,wa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Je(n){function t(n){return(a?r:e)(n)}function e(t){return Qe(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=le([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ua(ua(w)-1)<ka||ua(r-h)<ka?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;(T*T/M>i||ua((y*z+x*L)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Aa),a=16; +return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Ge(n){var t=Je(function(t,e){return n([t*Ca,e*Ca])});return function(n){return er(t(n))}}function Ke(n){this.stream=n}function Qe(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function nr(n){return tr(function(){return n})()}function tr(n){function t(n){return n=a(n[0]*Aa,n[1]*Aa),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ca,n[1]*Ca]}function r(){a=je(o=ir(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=Je(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Sc,_=wt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=er(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Sc):De((b=+n)*Aa),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Ue(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Aa,d=n[1]%360*Aa,r()):[v*Ca,d*Ca]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Aa,y=n[1]%360*Aa,x=n.length>2?n[2]%360*Aa:0,r()):[m*Ca,y*Ca,x*Ca]},Zo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function er(n){return Qe(n,function(t,e){n.point(t*Aa,e*Aa)})}function rr(n,t){return[n,t]}function ur(n,t){return[n>ba?n-wa:-ba>n?n+wa:n,t]}function ir(n,t,e){return n?t||e?je(ar(n),cr(t,e)):ar(n):t||e?cr(t,e):ur}function or(n){return function(t,e){return t+=n,[t>ba?t-wa:-ba>t?t+wa:t,e]}}function ar(n){var t=or(n);return t.invert=or(-n),t}function cr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=lr(e,u),i=lr(e,i),(o>0?i>u:u>i)&&(u+=o*wa)):(u=n+o*wa,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=de([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function lr(n,t){var e=le(t);e[0]-=n,ve(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-ka)%(2*Math.PI)}function fr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function hr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function gr(n){return n.source}function pr(n){return n.target}function vr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ca,Math.atan2(o,Math.sqrt(r*r+u*u))*Ca]}:function(){return[n*Ca,t*Ca]};return p.distance=h,p}function dr(){function n(n,u){var i=Math.sin(u*=Aa),o=Math.cos(u),a=ua((n*=Aa)-t),c=Math.cos(a);Dc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Pc.point=function(u,i){t=u*Aa,e=Math.sin(i*=Aa),r=Math.cos(i),Pc.point=n},Pc.lineEnd=function(){Pc.point=Pc.lineEnd=v}}function mr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function yr(n,t){function e(n,t){o>0?-Sa+ka>t&&(t=-Sa+ka):t>Sa-ka&&(t=Sa-ka);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(ba/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Sa]},e):Mr}function xr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ua(u)<ka?rr:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function Mr(n,t){return[n,Math.log(Math.tan(ba/4+t/2))]}function _r(n){var t,e=nr(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=ba*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function br(n,t){return[Math.log(Math.tan(ba/4+t/2)),-n]}function wr(n){return n[0]}function Sr(n){return n[1]}function kr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Er(n,t){return n[0]-t[0]||n[1]-t[1]}function Ar(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Cr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Nr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function zr(){Gr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Bc.pop()||new zr;return t.site=n,t}function Tr(n){Yr(n),Vc.remove(n),Bc.push(n),Gr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&ua(e-c.circle.x)<ka&&ua(r-c.circle.cy)<ka;)i=c.P,a.unshift(c),Tr(c),c=i;a.unshift(c),Yr(c);for(var s=o;s.circle&&ua(e-s.circle.x)<ka&&ua(r-s.circle.cy)<ka;)o=s.N,a.push(s),Tr(s),s=o;a.push(s),Yr(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],Br(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Xr(c.site,s.site,null,u),Or(c),Or(s)}function Rr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Vc._;a;)if(r=Dr(a,o)-i,r>ka)a=a.L;else{if(u=i-Pr(a,o),!(u>ka)){r>-ka?(t=a.P,e=a):u>-ka?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if(Vc.insert(t,c),t||e){if(t===e)return Yr(t),e=Lr(t.site),Vc.insert(c,e),c.edge=e.edge=Xr(t.site,c.site),Or(t),Or(e),void 0;if(!e)return c.edge=Xr(t.site,c.site),void 0;Yr(t),Yr(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Br(e.edge,s,p,M),c.edge=Xr(s,n,null,M),e.edge=Xr(n,p,null,M),Or(t),Or(e)}}function Dr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Pr(n,t){var e=n.N;if(e)return Dr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ur(n){this.site=n,this.edges=[]}function jr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Zc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(ua(r-t)>ka||ua(u-e)>ka)&&(a.splice(o,0,new Wr($r(i.site,l,ua(r-f)<ka&&p-u>ka?{x:f,y:ua(t-f)<ka?e:p}:ua(u-p)<ka&&h-r>ka?{x:ua(e-p)<ka?t:h,y:p}:ua(r-h)<ka&&u-g>ka?{x:h,y:ua(t-h)<ka?e:g}:ua(u-g)<ka&&r-f>ka?{x:ua(e-g)<ka?t:f,y:g}:null),i.site,null)),++c)}function Hr(n,t){return t.angle-n.angle}function Fr(){Gr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Or(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-Ea)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Wc.pop()||new Fr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=$c._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}$c.insert(y,m),y||(Xc=m)}}}}function Yr(n){var t=n.circle;t&&(t.P||(Xc=t.N),$c.remove(t),Wc.push(t),Gr(t),n.circle=null)}function Ir(n){for(var t,e=Ic,r=Pe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Zr(t,n)||!r(t)||ua(t.a.x-t.b.x)<ka&&ua(t.a.y-t.b.y)<ka)&&(t.a=t.b=null,e.splice(u,1))}function Zr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Vr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Xr(n,t,e,r){var u=new Vr(n,t);return Ic.push(u),e&&Br(u,n,t,e),r&&Br(u,t,n,r),Zc[n.i].edges.push(new Wr(u,n,t)),Zc[t.i].edges.push(new Wr(u,t,n)),u}function $r(n,t,e){var r=new Vr(n,null);return r.a=t,r.b=e,Ic.push(r),r}function Br(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Wr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Jr(){this._=null}function Gr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Kr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Qr(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function nu(n){for(;n.L;)n=n.L;return n}function tu(n,t){var e,r,u,i=n.sort(eu).pop();for(Ic=[],Zc=new Array(n.length),Vc=new Jr,$c=new Jr;;)if(u=Xc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Zc[i.i]=new Ur(i),Rr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;qr(u.arc)}t&&(Ir(t),jr(t));var o={cells:Zc,edges:Ic};return Vc=$c=Ic=Zc=null,o}function eu(n,t){return t.y-n.y||t.x-n.x}function ru(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function uu(n){return n.x}function iu(n){return n.y}function ou(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function au(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&au(n,c[0],e,r,o,a),c[1]&&au(n,c[1],o,r,u,a),c[2]&&au(n,c[2],e,a,o,i),c[3]&&au(n,c[3],o,a,u,i)}}function cu(n,t){n=Zo.rgb(n),t=Zo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+dt(Math.round(e+i*n))+dt(Math.round(r+o*n))+dt(Math.round(u+a*n))}}function su(n,t){var e,r={},u={};for(e in n)e in t?r[e]=hu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function lu(n,t){return t-=n=+n,function(e){return n+t*e}}function fu(n,t){var e,r,u,i=Gc.lastIndex=Kc.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=Gc.exec(n))&&(r=Kc.exec(t));)(u=r.index)>i&&(u=t.substring(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:lu(e,r)})),i=Kc.lastIndex;return i<t.length&&(u=t.substring(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function hu(n,t){for(var e,r=Zo.interpolators.length;--r>=0&&!(e=Zo.interpolators[r](n,t)););return e}function gu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(hu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function pu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function vu(n){return function(t){return 1-n(1-t)}}function du(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function mu(n){return n*n}function yu(n){return n*n*n}function xu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Mu(n){return function(t){return Math.pow(t,n)}}function _u(n){return 1-Math.cos(n*Sa)}function bu(n){return Math.pow(2,10*(n-1))}function wu(n){return 1-Math.sqrt(1-n*n)}function Su(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/wa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*wa/t)}}function ku(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Eu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Au(n,t){n=Zo.hcl(n),t=Zo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Zo.hsl(n),t=Zo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Zo.lab(n),t=Zo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(Ru(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ca,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ca:0}function Tu(n,t){return n[0]*t[0]+n[1]*t[1]}function qu(n){var t=Math.sqrt(Tu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ru(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Du(n,t){var e,r=[],u=[],i=Zo.transform(n),o=Zo.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:lu(a[0],c[0])},{i:3,x:lu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:lu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:lu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:lu(g[0],p[0])},{i:e-2,x:lu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Pu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Uu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function ju(n){for(var t=n.source,e=n.target,r=Fu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Hu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Fu(n,t){if(n===t)return n;for(var e=Hu(n),r=Hu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Ou(n){n.fixed|=2}function Yu(n){n.fixed&=-7}function Iu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Zu(n){n.fixed&=-5}function Vu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Vu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Xu(n,t){return Zo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Ku,n}function $u(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Bu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Wu(n){return n.children}function Ju(n){return n.value}function Gu(n,t){return t.value-n.value}function Ku(n){return Zo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function Qu(n){return n.x}function ni(n){return n.y}function ti(n,t,e){n.y0=t,n.y=e}function ei(n){return Zo.range(n.length)}function ri(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ui(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ii(n){return n.reduce(oi,0)}function oi(n,t){return n+t[1]}function ai(n,t){return ci(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ci(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Zo.min(n),Zo.max(n)]}function li(n,t){return n.value-t.value}function fi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function hi(n,t){n._pack_next=t,t._pack_prev=n}function gi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function pi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(vi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],yi(r,u,i),t(i),fi(r,i),r._pack_prev=i,fi(i,u),u=r._pack_next,o=3;s>o;o++){yi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(gi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!gi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?hi(r,u=a):hi(r=c,u),o--):(fi(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(di)}}function vi(n){n._pack_next=n._pack_prev=n}function di(n){delete n._pack_next,delete n._pack_prev}function mi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)mi(u[i],t,e,r)}function yi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function xi(n,t){return n.parent==t.parent?1:2}function Mi(n){var t=n.children;return t.length?t[0]:n.t}function _i(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function bi(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function wi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Si(n,t,e){return n.a.parent===t.parent?n.a:e}function ki(n){return 1+Zo.max(n,function(n){return n.y})}function Ei(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ai(n){var t=n.children;return t&&t.length?Ai(t[0]):n}function Ci(n){var t,e=n.children;return e&&(t=e.length)?Ci(e[t-1]):n}function Ni(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function zi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Li(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ti(n){return n.rangeExtent?n.rangeExtent():Li(n.range())}function qi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ri(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Di(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ss}function Pi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Zo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ui(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Pi:qi,c=r?Uu:Pu;return o=u(n,t,c,e),a=u(t,n,c,hu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(zu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Oi(n,t)},i.tickFormat=function(t,e){return Yi(n,t,e)},i.nice=function(t){return Hi(n,t),u()},i.copy=function(){return Ui(n,t,e,r)},u()}function ji(n,t){return Zo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Hi(n,t){return Ri(n,Di(Fi(n,t)[2]))}function Fi(n,t){null==t&&(t=10);var e=Li(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Oi(n,t){return Zo.range.apply(Zo,Fi(n,t))}function Yi(n,t,e){var r=Fi(n,t);if(e){var u=Ga.exec(e);if(u.shift(),"s"===u[8]){var i=Zo.formatPrefix(Math.max(ua(r[0]),ua(r[1])));return u[7]||(u[7]="."+Ii(i.scale(r[2]))),u[8]="f",e=Zo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Zi(u[8],r)),e=u.join("")}else e=",."+Ii(r[2])+"f";return Zo.format(e)}function Ii(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Zi(n,t){var e=Ii(t[2]);return n in ls?Math.abs(e-Ii(Math.max(ua(t[0]),ua(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Vi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ri(r.map(u),e?Math:hs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Li(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return fs;arguments.length<2?t=fs:"function"!=typeof t&&(t=Zo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Vi(n.copy(),t,e,r)},ji(o,n)}function Xi(n,t,e){function r(t){return n(u(t))}var u=$i(t),i=$i(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Oi(e,n)},r.tickFormat=function(n,t){return Yi(e,n,t)},r.nice=function(n){return r.domain(Hi(e,n))},r.exponent=function(o){return arguments.length?(u=$i(t=o),i=$i(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Xi(n.copy(),t,e)},ji(r,n)}function $i(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Bi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Zo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+s)/2:c+l*o/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-o+2*c);return i=r(l+h*c,h),s&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-o+2*c)),g=f-l-(n.length-o)*h;return i=r(l+Math.round(g/2),h),s&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return Li(t.a[0])},e.copy=function(){return Bi(n,t)},e.domain(n)}function Wi(e,r){function u(){var n=0,t=r.length;for(o=[];++n<t;)o[n-1]=Zo.quantile(e,n/t);return i}function i(n){return isNaN(n=+n)?void 0:r[Zo.bisect(o,n)]}var o;return i.domain=function(r){return arguments.length?(e=r.filter(t).sort(n),u()):e},i.range=function(n){return arguments.length?(r=n,u()):r},i.quantiles=function(){return o},i.invertExtent=function(n){return n=r.indexOf(n),0>n?[0/0,0/0]:[n>0?o[n-1]:e[0],n<o.length?o[n]:e[e.length-1]]},i.copy=function(){return Wi(e,r)},u()}function Ji(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ji(n,t,e)},u()}function Gi(n,t){function e(e){return e>=e?t[Zo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Gi(n,t)},e}function Ki(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Oi(n,t)},t.tickFormat=function(t,e){return Yi(n,t,e)},t.copy=function(){return Ki(n)},t}function Qi(n){return n.innerRadius}function no(n){return n.outerRadius}function to(n){return n.startAngle}function eo(n){return n.endAngle}function ro(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=wr,r=Sr,u=we,i=uo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=xs.get(n)||uo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function uo(n){return n.join("L")}function io(n){return uo(n)+"Z"}function oo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function so(n,t){return n.length<4?uo(n):n[1]+ho(n.slice(1,n.length-1),go(n,t))}function lo(n,t){return n.length<3?uo(n):n[0]+ho((n.push(n[0]),n),go([n[n.length-2]].concat(n,[n[1]]),t))}function fo(n,t){return n.length<3?uo(n):n[0]+ho(n,go(n,t))}function ho(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return uo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function go(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function po(n){if(n.length<3)return uo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",xo(bs,o),",",xo(bs,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Mo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function vo(n){if(n.length<4)return uo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(xo(bs,i)+","+xo(bs,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),Mo(e,i,o);return e.join("")}function mo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[xo(bs,o),",",xo(bs,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Mo(t,o,a);return t.join("")}function yo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return po(n)}function xo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Mo(n,t,e){n.push("C",xo(Ms,t),",",xo(Ms,e),",",xo(_s,t),",",xo(_s,e),",",xo(bs,t),",",xo(bs,e))}function _o(n,t){return(t[1]-n[1])/(t[0]-n[0])}function bo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=_o(u,i);++t<e;)r[t]=(o+(o=_o(u=i,i=n[t+1])))/2;return r[t]=o,r}function wo(n){for(var t,e,r,u,i=[],o=bo(n),a=-1,c=n.length-1;++a<c;)t=_o(n[a],n[a+1]),ua(t)<ka?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function So(n){return n.length<3?uo(n):n[0]+ho(n,wo(n))}function ko(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+ms,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Eo(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=bt(e),_=bt(u),b=e===r?function(){return g}:bt(r),w=u===i?function(){return p}:bt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=wr,r=wr,u=0,i=Sr,o=we,a=uo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=xs.get(n)||uo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Ao(n){return n.radius}function Co(n){return[n.x,n.y]}function No(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+ms;return[e*Math.cos(r),e*Math.sin(r)]}}function zo(){return 64}function Lo(){return"circle"}function To(n){var t=Math.sqrt(n/ba);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function qo(n,t){return sa(n,Cs),n.id=t,n}function Ro(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Do(n){return null==n&&(n=""),function(){this.textContent=n}}function Po(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Zo.timer(function(r){function o(r){return u.active>e?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Zo.timer(function(){return p.c=c(r||1)?we:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a); +return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ba,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function Uo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function jo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Ho(n){return n.toISOString()}function Fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Zo.bisect(Us,u);return i==Us.length?[t.year,Fi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Us[i-1]<Us[i]/u?i-1:i]:[Fs,Fi(n,e)[2]]}return r.invert=function(t){return Oo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Oo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Oo(+e+1),t).length}var i=r.domain(),o=Li(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Ri(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Oo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Oo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Li(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Oo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Fo(n.copy(),t,e)},ji(r,n)}function Oo(n){return new Date(n)}function Yo(n){return JSON.parse(n.responseText)}function Io(n){var t=$o.createRange();return t.selectNode($o.body),t.createContextualFragment(n.responseText)}var Zo={version:"3.4.11"};Date.now||(Date.now=function(){return+new Date});var Vo=[].slice,Xo=function(n){return Vo.call(n)},$o=document,Bo=$o.documentElement,Wo=window;try{Xo(Bo.childNodes)[0].nodeType}catch(Jo){Xo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{$o.createElement("div").style.setProperty("opacity",0,"")}catch(Go){var Ko=Wo.Element.prototype,Qo=Ko.setAttribute,na=Ko.setAttributeNS,ta=Wo.CSSStyleDeclaration.prototype,ea=ta.setProperty;Ko.setAttribute=function(n,t){Qo.call(this,n,t+"")},Ko.setAttributeNS=function(n,t,e){na.call(this,n,t,e+"")},ta.setProperty=function(n,t,e){ea.call(this,n,t+"",e)}}Zo.ascending=n,Zo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Zo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Zo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Zo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Zo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Zo.mean=function(n,e){var r,u=0,i=n.length,o=-1,a=i;if(1===arguments.length)for(;++o<i;)t(r=n[o])?u+=r:--a;else for(;++o<i;)t(r=e.call(n,n[o],o))?u+=r:--a;return a?u/a:void 0},Zo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Zo.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Zo.quantile(e.sort(n),.5):void 0};var ra=e(n);Zo.bisectLeft=ra.left,Zo.bisect=Zo.bisectRight=ra.right,Zo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Zo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Zo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Zo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Zo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Zo.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Zo.transpose=function(n){return Zo.zip.apply(Zo,n)},Zo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Zo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Zo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Zo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ua=Math.abs;Zo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ua(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Zo.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[ia+n]},set:function(n,t){return this[ia+n]=t},remove:c,keys:s,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1),this[t])}});var ia="\x00",oa=ia.charCodeAt(0);Zo.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Zo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Zo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ia+n]=!0,n},remove:function(n){return n=ia+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1))}}),Zo.behavior={},Zo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var aa=["webkit","ms","moz","Moz","o","O"];Zo.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Zo.event=null,Zo.requote=function(n){return n.replace(ca,"\\$&")};var ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},la=function(n,t){return t.querySelector(n)},fa=function(n,t){return t.querySelectorAll(n)},ha=Bo.matches||Bo[p(Bo,"matchesSelector")],ga=function(n,t){return ha.call(n,t)};"function"==typeof Sizzle&&(la=function(n,t){return Sizzle(n,t)[0]||null},fa=Sizzle,ga=Sizzle.matchesSelector),Zo.selection=function(){return ma};var pa=Zo.selection.prototype=[];pa.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},pa.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Xo(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var va={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Zo.ns={prefix:va,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),va.hasOwnProperty(e)?{space:va[e],local:n}:n}},pa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Zo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},pa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(C(t,n[t]));return this}return this.each(C(n,t))},pa.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Wo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},pa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},pa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},pa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},pa.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},pa.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},pa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},pa.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=q(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=q(i);for(;f>r;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),s=_([]),l=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return s.enter=function(){return c},s.exit=function(){return l},s},pa.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},pa.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},pa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},pa.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},pa.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},pa.call=function(n){var t=Xo(arguments);return n.apply(t[0]=this,t),this},pa.empty=function(){return!this.node()},pa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},pa.size=function(){var n=0;return this.each(function(){++n}),n};var da=[];Zo.selection.enter=U,Zo.selection.enter.prototype=da,da.append=pa.append,da.empty=pa.empty,da.node=pa.node,da.call=pa.call,da.size=pa.size,da.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return _(o)},da.insert=function(n,t){return arguments.length<2&&(t=j(this)),pa.insert.call(this,n,t)},pa.transition=function(){for(var n,t,e=Ss||++Ns,r=[],u=ks||{time:Date.now(),ease:xu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&Po(t,c,e,u),n.push(t)}return qo(r,e)},pa.interrupt=function(){return this.each(H)},Zo.select=function(n){var t=["string"==typeof n?la(n,$o):n];return t.parentNode=Bo,_([t])},Zo.selectAll=function(n){var t=Xo("string"==typeof n?fa(n,$o):n);return t.parentNode=Bo,_([t])};var ma=Zo.select(Bo);pa.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ya=Zo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ya.forEach(function(n){"on"+n in $o&&ya.remove(n)});var xa="onselectstart"in $o?null:p(Bo.style,"userSelect"),Ma=0;Zo.mouse=function(n){return Z(n,x())};var _a=/WebKit/.test(Wo.navigator.userAgent)?-1:0;Zo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Xo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Zo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Zo.event.target===f),g({type:"dragend"}))}var s,l=this,f=Zo.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Zo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Zo.mouse,$,"mousemove","mouseup"),i=t(V,Zo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Zo.rebind(n,e,"on")};var ba=Math.PI,wa=2*ba,Sa=ba/2,ka=1e-6,Ea=ka*ka,Aa=ba/180,Ca=180/ba,Na=Math.SQRT2,za=2,La=4;Zo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(za*h)*(e*nt(Na*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Na*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Na*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+La*f)/(2*i*za*h),p=(c*c-i*i-La*f)/(2*c*za*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Na;return e.duration=1e3*y,e},Zo.behavior.zoom=function(){function n(n){n.on(A,s).on(Ra+".zoom",f).on("dblclick.zoom",h).on(z,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Zo.mouse(r),h),a(s)}function e(){f.on(C,null).on(N,null),g(l&&Zo.event.target===i),c(s)}var r=this,i=Zo.event.target,s=L.of(r,arguments),l=0,f=Zo.select(Wo).on(C,n).on(N,e),h=t(Zo.mouse(r)),g=I();H.call(r),o(s)}function l(){function n(){var n=Zo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Zo.event.target;Zo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Zo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var s=n(),l=Date.now();if(1===s.length){if(500>l-m){var h=s[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=l}else if(s.length>1){var h=s[0],x=s[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Zo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Zo.event.touches.length){for(var t=Zo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Zo.selectAll(b).on(x,null),w.on(A,s).on(z,l),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Zo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Zo.select(g).on(A,null).on(z,e),k=I();H.call(g),e(),o(p)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Zo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*Ta())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Zo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Zo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=qa,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Ss?Zo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Zo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?qa:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Zo.rebind(n,L,"on")};var Ta,qa=[0,1/0],Ra="onwheel"in $o?(Ta=function(){return-Zo.event.deltaY*(Zo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in $o?(Ta=function(){return Zo.event.wheelDelta},"mousewheel"):(Ta=function(){return-Zo.event.detail},"MozMousePixelScroll");Zo.color=et,et.prototype.toString=function(){return this.rgb()+""},Zo.hsl=rt;var Da=rt.prototype=new et;Da.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Da.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Da.rgb=function(){return ut(this.h,this.s,this.l)},Zo.hcl=it;var Pa=it.prototype=new et;Pa.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+Ua*(arguments.length?n:1)))},Pa.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-Ua*(arguments.length?n:1)))},Pa.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Zo.lab=at;var Ua=18,ja=.95047,Ha=1,Fa=1.08883,Oa=at.prototype=new et;Oa.brighter=function(n){return new at(Math.min(100,this.l+Ua*(arguments.length?n:1)),this.a,this.b)},Oa.darker=function(n){return new at(Math.max(0,this.l-Ua*(arguments.length?n:1)),this.a,this.b)},Oa.rgb=function(){return ct(this.l,this.a,this.b)},Zo.rgb=gt;var Ya=gt.prototype=new et;Ya.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ya.hsl=function(){return yt(this.r,this.g,this.b)},Ya.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Ia=Zo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ia.forEach(function(n,t){Ia.set(n,pt(t))}),Zo.functor=bt,Zo.xhr=St(wt),Zo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Zo.csv=Zo.dsv(",","text/csv"),Zo.tsv=Zo.dsv(" ","text/tab-separated-values"),Zo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Za,Va,Xa,$a,Ba,Wa=Wo[p(Wo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Zo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Va?Va.n=i:Za=i,Va=i,Xa||($a=clearTimeout($a),Xa=1,Wa(At))},Zo.timer.flush=function(){Ct(),Nt()},Zo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ja=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Zo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Zo.round(n,zt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ja[8+e/3]};var Ga=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Ka=Zo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Zo.round(n,zt(n,t))).toFixed(Math.max(0,Math.min(20,zt(n*(1+1e-15),t))))}}),Qa=Zo.time={},nc=Date;Rt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){tc.setUTCDate.apply(this._,arguments)},setDay:function(){tc.setUTCDay.apply(this._,arguments)},setFullYear:function(){tc.setUTCFullYear.apply(this._,arguments)},setHours:function(){tc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){tc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){tc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){tc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){tc.setUTCSeconds.apply(this._,arguments)},setTime:function(){tc.setTime.apply(this._,arguments)}};var tc=Date.prototype;Qa.year=Dt(function(n){return n=Qa.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Qa.years=Qa.year.range,Qa.years.utc=Qa.year.utc.range,Qa.day=Dt(function(n){var t=new nc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Qa.days=Qa.day.range,Qa.days.utc=Qa.day.utc.range,Qa.dayOfYear=function(n){var t=Qa.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=Qa[n]=Dt(function(n){return(n=Qa.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Qa[n+"s"]=e.range,Qa[n+"s"].utc=e.utc.range,Qa[n+"OfYear"]=function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)}}),Qa.week=Qa.sunday,Qa.weeks=Qa.sunday.range,Qa.weeks.utc=Qa.sunday.utc.range,Qa.weekOfYear=Qa.sundayOfYear;var ec={"-":"",_:" ",0:"0"},rc=/^\s*\d+/,uc=/^%/;Zo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Ut(n)}};var ic=Zo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Zo.format=ic.numberFormat,Zo.geo={},ue.prototype={s:0,t:0,add:function(n){ie(n,this.t,oc),ie(oc.s,this.s,this),this.s?this.t+=oc.t:this.s=oc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var oc=new ue;Zo.geo.stream=function(n,t){n&&ac.hasOwnProperty(n.type)?ac[n.type](n,t):oe(n,t)};var ac={Feature:function(n,t){oe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)oe(e[r].geometry,t)}},cc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){ae(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ae(e[r],t,0)},Polygon:function(n,t){ce(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ce(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)oe(e[r],t)}};Zo.geo.area=function(n){return sc=0,Zo.geo.stream(n,fc),sc};var sc,lc=new ue,fc={sphere:function(){sc+=4*ba},point:v,lineStart:v,lineEnd:v,polygonStart:function(){lc.reset(),fc.lineStart=se},polygonEnd:function(){var n=2*lc;sc+=0>n?4*ba+n:n,fc.lineStart=fc.lineEnd=fc.point=v}};Zo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=le([t*Aa,e*Aa]);if(m){var u=he(m,r),i=[u[1],-u[0],0],o=he(i,u);ve(o),o=de(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ca*s,d=ua(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ca;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ca;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ua(r)>180?r+(r>0?360:-360):r}else v=n,d=e;fc.point(n,e),t(n,e)}function i(){fc.lineStart()}function o(){u(v,d),fc.lineEnd(),ua(y)>ka&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,fc.polygonStart()},polygonEnd:function(){fc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>lc?(l=-(h=180),f=-(g=90)):y>ka?g=90:-ka>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Zo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e); +for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Zo.geo.centroid=function(n){hc=gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,wc);var t=Mc,e=_c,r=bc,u=t*t+e*e+r*r;return Ea>u&&(t=mc,e=yc,r=xc,ka>gc&&(t=pc,e=vc,r=dc),u=t*t+e*e+r*r,Ea>u)?[0/0,0/0]:[Math.atan2(e,t)*Ca,G(r/Math.sqrt(u))*Ca]};var hc,gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc={sphere:v,point:ye,lineStart:Me,lineEnd:_e,polygonStart:function(){wc.lineStart=be},polygonEnd:function(){wc.lineStart=Me}},Sc=Ae(we,Te,Re,[-ba,-ba/2]),kc=1e9;Zo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ue(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Zo.geo.conicEqualArea=function(){return He(Fe)}).raw=Fe,Zo.geo.albers=function(){return Zo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Zo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Zo.geo.albers(),o=Zo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Zo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+ka,f+.12*s+ka],[l-.214*s-ka,f+.234*s-ka]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+ka,f+.166*s+ka],[l-.115*s-ka,f+.234*s-ka]]).stream(c).point,n},n.scale(1070)};var Ec,Ac,Cc,Nc,zc,Lc,Tc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Ac=0,Tc.lineStart=Oe},polygonEnd:function(){Tc.lineStart=Tc.lineEnd=Tc.point=v,Ec+=ua(Ac/2)}},qc={point:Ye,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Rc={point:Ve,lineStart:Xe,lineEnd:$e,polygonStart:function(){Rc.lineStart=Be},polygonEnd:function(){Rc.point=Ve,Rc.lineStart=Xe,Rc.lineEnd=$e}};Zo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Zo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ec=0,Zo.geo.stream(n,u(Tc)),Ec},n.centroid=function(n){return pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,u(Rc)),bc?[Mc/bc,_c/bc]:xc?[mc/xc,yc/xc]:dc?[pc/dc,vc/dc]:[0/0,0/0]},n.bounds=function(n){return zc=Lc=-(Cc=Nc=1/0),Zo.geo.stream(n,u(qc)),[[Cc,Nc],[zc,Lc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ge(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ie:new We(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Zo.geo.albersUsa()).context(null)},Zo.geo.transform=function(n){return{stream:function(t){var e=new Ke(t);for(var r in n)e[r]=n[r];return e}}},Ke.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Zo.geo.projection=nr,Zo.geo.projectionMutator=tr,(Zo.geo.equirectangular=function(){return nr(rr)}).raw=rr.invert=rr,Zo.geo.rotation=function(n){function t(t){return t=n(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t}return n=ir(n[0]%360*Aa,n[1]*Aa,n.length>2?n[2]*Aa:0),t.invert=function(t){return t=n.invert(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t},t},ur.invert=rr,Zo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ir(-n[0]*Aa,-n[1]*Aa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ca,n[1]*=Ca}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Aa,u*Aa),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Aa,(u=+r)*Aa),n):u},n.angle(90)},Zo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Aa,u=n[1]*Aa,i=t[1]*Aa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Zo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Zo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Zo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Zo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ua(n%d)>ka}).map(l)).concat(Zo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ua(n%m)>ka}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=fr(a,o,90),f=hr(r,e,y),h=fr(s,c,90),g=hr(i,u,y),n):y},n.majorExtent([[-180,-90+ka],[180,90-ka]]).minorExtent([[-180,-80-ka],[180,80+ka]])},Zo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=gr,u=pr;return n.distance=function(){return Zo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Zo.geo.interpolate=function(n,t){return vr(n[0]*Aa,n[1]*Aa,t[0]*Aa,t[1]*Aa)},Zo.geo.length=function(n){return Dc=0,Zo.geo.stream(n,Pc),Dc};var Dc,Pc={sphere:v,point:v,lineStart:dr,lineEnd:v,polygonStart:v,polygonEnd:v},Uc=mr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Zo.geo.azimuthalEqualArea=function(){return nr(Uc)}).raw=Uc;var jc=mr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Zo.geo.azimuthalEquidistant=function(){return nr(jc)}).raw=jc,(Zo.geo.conicConformal=function(){return He(yr)}).raw=yr,(Zo.geo.conicEquidistant=function(){return He(xr)}).raw=xr;var Hc=mr(function(n){return 1/n},Math.atan);(Zo.geo.gnomonic=function(){return nr(Hc)}).raw=Hc,Mr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Sa]},(Zo.geo.mercator=function(){return _r(Mr)}).raw=Mr;var Fc=mr(function(){return 1},Math.asin);(Zo.geo.orthographic=function(){return nr(Fc)}).raw=Fc;var Oc=mr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Zo.geo.stereographic=function(){return nr(Oc)}).raw=Oc,br.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Sa]},(Zo.geo.transverseMercator=function(){var n=_r(br),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=br,Zo.geom={},Zo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Er),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=kr(a),l=kr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=wr,r=Sr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Zo.geom.polygon=function(n){return sa(n,Yc),n};var Yc=Zo.geom.polygon.prototype=[];Yc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Yc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Yc.clip=function(n){for(var t,e,r,u,i,o,a=Nr(n),c=-1,s=this.length-Nr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Ar(o,l,u)?(Ar(i,l,u)||n.push(Cr(i,o,l,u)),n.push(o)):Ar(i,l,u)&&n.push(Cr(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Ic,Zc,Vc,Xc,$c,Bc=[],Wc=[];Ur.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Hr),t.length},Wr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Jr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=nu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Kr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Qr(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(Qr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Kr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?nu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Kr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,Qr(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Kr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,Qr(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Kr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,Qr(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Zo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return tu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/ka)*ka,y:Math.round(o(n,t)/ka)*ka,i:t}})}var r=wr,u=Sr,i=r,o=u,a=Jc;return n?t(n):(t.links=function(n){return tu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return tu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Hr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&ru(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=bt(r=n),t):r},t.y=function(n){return arguments.length?(o=bt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Jc:n,t):a===Jc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Jc?null:a&&a[1]},t)};var Jc=[[-1e6,-1e6],[1e6,1e6]];Zo.geom.delaunay=function(n){return Zo.geom.voronoi().triangles(n)},Zo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(ua(c-e)+ua(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=ou()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=ou();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){au(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=wr,c=Sr;return(o=arguments.length)?(a=uu,c=iu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Zo.interpolateRgb=cu,Zo.interpolateObject=su,Zo.interpolateNumber=lu,Zo.interpolateString=fu;var Gc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kc=new RegExp(Gc.source,"g");Zo.interpolate=hu,Zo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ia.has(t)||/^(#|rgb\(|hsl\()/.test(t)?cu:fu:t instanceof et?cu:Array.isArray(t)?gu:"object"===e&&isNaN(t)?su:lu)(n,t)}],Zo.interpolateArray=gu;var Qc=function(){return wt},ns=Zo.map({linear:Qc,poly:Mu,quad:function(){return mu},cubic:function(){return yu},sin:function(){return _u},exp:function(){return bu},circle:function(){return wu},elastic:Su,back:ku,bounce:function(){return Eu}}),ts=Zo.map({"in":wt,out:vu,"in-out":du,"out-in":function(n){return du(vu(n))}});Zo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ns.get(e)||Qc,r=ts.get(r)||wt,pu(r(e.apply(null,Vo.call(arguments,1))))},Zo.interpolateHcl=Au,Zo.interpolateHsl=Cu,Zo.interpolateLab=Nu,Zo.interpolateRound=zu,Zo.transform=function(n){var t=$o.createElementNS(Zo.ns.prefix.svg,"g");return(Zo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:es)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var es={a:1,b:0,c:0,d:1,e:0,f:0};Zo.interpolateTransform=Du,Zo.layout={},Zo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(ju(n[e]));return t}},Zo.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Zo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Zo.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(wa-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Zo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Zo.event.x,n.py=Zo.event.y,a.resume()}var e,r,u,i,o,a={},c=Zo.dispatch("start","tick","end"),s=[1,1],l=.9,f=rs,h=us,g=-30,p=is,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Vu(t=Zo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Zo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Zo.behavior.drag().origin(wt).on("dragstart.force",Ou).on("drag.force",t).on("dragend.force",Yu)),arguments.length?(this.on("mouseover.force",Iu).on("mouseout.force",Zu).call(e),void 0):e},Zo.rebind(a,c,"on")};var rs=20,us=1,is=1/0;Zo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(s=e.call(n,i,i.depth))&&(c=s.length)){for(var c,s,l;--c>=0;)o.push(l=s[c]),l.parent=i,l.depth=i.depth+1;r&&(i.value=0),i.children=s}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Bu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Gu,e=Wu,r=Ju;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&($u(t,function(n){n.children&&(n.value=0)}),Bu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Zo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Zo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Xu(e,r)},Zo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Zo.sum(o),s=Zo.range(i.length);null!=e&&s.sort(e===os?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=os,r=0,u=wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var os={};Zo.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Zo.permute(s,f),l=Zo.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=wt,e=ei,r=ri,u=ti,i=Qu,o=ni;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:as.get(t)||ei,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:cs.get(t)||ri,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var as=Zo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ui),i=n.map(ii),o=Zo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Zo.range(n.length).reverse()},"default":ei}),cs=Zo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ri});Zo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Zo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ai;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ci(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Zo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Bu(a,function(n){n.r=+l(n.value)}),Bu(a,pi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;Bu(a,function(n){n.r+=f}),Bu(a,pi),Bu(a,function(n){n.r-=f})}return mi(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Zo.layout.hierarchy().sort(li),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Xu(n,e)},Zo.layout.tree=function(){function n(n,u){var l=o.call(this,n,u),f=l[0],h=t(f);if(Bu(h,e),h.parent.m=-h.z,$u(h,r),s)$u(f,i);else{var g=f,p=f,v=f;$u(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);$u(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return l}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){wi(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],s=u.m,l=i.m,f=o.m,h=c.m;o=_i(o),u=Mi(u),o&&u;)c=Mi(c),i=_i(i),i.a=n,r=o.z+f-u.z-s+a(o._,u._),r>0&&(bi(Si(o,n,e),n,r),s+=r,l+=r),f+=o.m,s+=u.m,h+=c.m,l+=i.m;o&&!_i(i)&&(i.t=o,i.m+=f-l),u&&!Mi(c)&&(c.t=u,c.m+=s-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Zo.layout.hierarchy().sort(null).value(null),a=xi,c=[1,1],s=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(s=null==(c=t)?i:null,n):s?null:c},n.nodeSize=function(t){return arguments.length?(s=null==(c=t)?null:i,n):s?c:null},Xu(n,o)},Zo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;Bu(c,function(n){var t=n.children;t&&t.length?(n.x=Ei(t),n.y=ki(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ai(c),f=Ci(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return Bu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Zo.layout.hierarchy().sort(null).value(null),e=xi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Xu(n,t)},Zo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Zo.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Ni,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ni(t):zi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return zi(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Ni:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Xu(i,a)},Zo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Zo.random.normal.apply(Zo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Zo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Zo.scale={};var ss={floor:wt,ceil:wt};Zo.scale.linear=function(){return Ui([0,1],[0,1],hu,!1)};var ls={s:1,g:1,p:1,r:1,e:1};Zo.scale.log=function(){return Vi(Zo.scale.linear().domain([0,1]),10,!0,[1,10])};var fs=Zo.format(".0e"),hs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Zo.scale.pow=function(){return Xi(Zo.scale.linear(),1,[0,1])},Zo.scale.sqrt=function(){return Zo.scale.pow().exponent(.5)},Zo.scale.ordinal=function(){return Bi([],{t:"range",a:[[]]})},Zo.scale.category10=function(){return Zo.scale.ordinal().range(gs)},Zo.scale.category20=function(){return Zo.scale.ordinal().range(ps)},Zo.scale.category20b=function(){return Zo.scale.ordinal().range(vs)},Zo.scale.category20c=function(){return Zo.scale.ordinal().range(ds)};var gs=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),ps=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),vs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Zo.scale.quantile=function(){return Wi([],[])},Zo.scale.quantize=function(){return Ji(0,1,[0,1])},Zo.scale.threshold=function(){return Gi([.5],[0,1])},Zo.scale.identity=function(){return Ki([0,1])},Zo.svg={},Zo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ms,a=u.apply(this,arguments)+ms,c=(o>a&&(c=o,o=a,a=c),a-o),s=ba>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a); +return c>=ys?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=Qi,e=no,r=to,u=eo;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ms;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ms=-Sa,ys=wa-ka;Zo.svg.line=function(){return ro(wt)};var xs=Zo.map({linear:uo,"linear-closed":io,step:oo,"step-before":ao,"step-after":co,basis:po,"basis-open":vo,"basis-closed":mo,bundle:yo,cardinal:fo,"cardinal-open":so,"cardinal-closed":lo,monotone:So});xs.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Ms=[0,2/3,1/3,0],_s=[0,1/3,2/3,0],bs=[0,1/6,2/3,1/6];Zo.svg.line.radial=function(){var n=ro(ko);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},ao.reverse=co,co.reverse=ao,Zo.svg.area=function(){return Eo(wt)},Zo.svg.area.radial=function(){var n=Eo(ko);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Zo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ms,l=s.call(n,u,r)+ms;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>ba)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=gr,o=pr,a=Ao,c=to,s=eo;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(s=bt(t),n):s},n},Zo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=gr,e=pr,r=Co;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Zo.svg.diagonal.radial=function(){var n=Zo.svg.diagonal(),t=Co,e=n.projection;return n.projection=function(n){return arguments.length?e(No(t=n)):t},n},Zo.svg.symbol=function(){function n(n,r){return(ws.get(t.call(this,n,r))||To)(e.call(this,n,r))}var t=Lo,e=zo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var ws=Zo.map({circle:To,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*As)),e=t*As;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Zo.svg.symbolTypes=ws.keys();var Ss,ks,Es=Math.sqrt(3),As=Math.tan(30*Aa),Cs=[],Ns=0;Cs.call=pa.call,Cs.empty=pa.empty,Cs.node=pa.node,Cs.size=pa.size,Zo.transition=function(n){return arguments.length?Ss?n.transition():n:ma.transition()},Zo.transition.prototype=Cs,Cs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),Po(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return qo(i,u)},Cs.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Po(u,g,o,i),t.push(u)}return qo(a,o)},Cs.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return qo(u,this.id)},Cs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Cs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Du:hu,a=Zo.ns.qualify(n);return Ro(this,"attr."+n,t,a.local?i:u)},Cs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Zo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Cs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Wo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=hu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Ro(this,"style."+n,t,u)},Cs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Wo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Cs.text=function(n){return Ro(this,"text",n,Do)},Cs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Cs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Zo.ease.apply(Zo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Cs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Cs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Cs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=ks,u=Ss;Ss=e,P(this,function(t,r,u){ks=t.__transition__[e],n.call(t,t.__data__,r,u)}),ks=r,Ss=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Zo.dispatch("start","end"))).on(n,t)});return this},Cs.transition=function(){for(var n,t,e,r,u=this.id,i=++Ns,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Po(e,s,i,r)),n.push(e)}return qo(o,i)},Zo.svg.axis=function(){function n(n){n.each(function(){var n,s=Zo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",ka),d=Zo.transition(p.exit()).style("opacity",ka).remove(),m=Zo.transition(p.order()).style("opacity",1),y=Ti(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Zo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Uo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Uo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=jo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=jo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Zo.scale.linear(),r=zs,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ls?t+"":zs,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var zs="bottom",Ls={top:1,right:1,bottom:1,left:1};Zo.svg.brush=function(){function n(i){i.each(function(){var i=Zo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Ts[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Zo.transition(i),h=Zo.transition(o);c&&(l=Ti(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ti(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Zo.event.keyCode&&(C||(x=null,z[0]-=l[1],z[1]-=f[1],C=2),y())}function p(){32==Zo.event.keyCode&&2==C&&(z[0]+=l[1],z[1]+=f[1],C=0,y())}function v(){var n=Zo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Zo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),z[0]=l[+(n[0]<x[0])],z[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=Ti(t),c=a[0],s=a[1],p=z[e],v=e?f:l,d=v[1]-v[0];return C&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Zo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Zo.select(Zo.event.target),w=a.of(_,arguments),S=Zo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=I(),z=Zo.mouse(_),L=Zo.select(Wo).on("keydown.brush",u).on("keyup.brush",p);if(Zo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=l[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[l[1-T]-z[0],f[1-q]-z[1]],z[0]=l[T],z[1]=f[q]}else Zo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Zo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=qs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ss?Zo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=gu(l,t.x),r=gu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=qs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=qs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Zo.rebind(n,a,"on")};var Ts={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},qs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Rs=Qa.format=ic.timeFormat,Ds=Rs.utc,Ps=Ds("%Y-%m-%dT%H:%M:%S.%LZ");Rs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ho:Ps,Ho.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Ho.toString=Ps.toString,Qa.second=Dt(function(n){return new nc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Qa.seconds=Qa.second.range,Qa.seconds.utc=Qa.second.utc.range,Qa.minute=Dt(function(n){return new nc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Qa.minutes=Qa.minute.range,Qa.minutes.utc=Qa.minute.utc.range,Qa.hour=Dt(function(n){var t=n.getTimezoneOffset()/60;return new nc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Qa.hours=Qa.hour.range,Qa.hours.utc=Qa.hour.utc.range,Qa.month=Dt(function(n){return n=Qa.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Qa.months=Qa.month.range,Qa.months.utc=Qa.month.utc.range;var Us=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],js=[[Qa.second,1],[Qa.second,5],[Qa.second,15],[Qa.second,30],[Qa.minute,1],[Qa.minute,5],[Qa.minute,15],[Qa.minute,30],[Qa.hour,1],[Qa.hour,3],[Qa.hour,6],[Qa.hour,12],[Qa.day,1],[Qa.day,2],[Qa.week,1],[Qa.month,1],[Qa.month,3],[Qa.year,1]],Hs=Rs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",we]]),Fs={range:function(n,t,e){return Zo.range(Math.ceil(n/e)*e,+t,e).map(Oo)},floor:wt,ceil:wt};js.year=Qa.year,Qa.scale=function(){return Fo(Zo.scale.linear(),js,Hs)};var Os=js.map(function(n){return[n[0].utc,n[1]]}),Ys=Ds.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",we]]);Os.year=Qa.year.utc,Qa.scale.utc=function(){return Fo(Zo.scale.linear(),Os,Ys)},Zo.text=St(function(n){return n.responseText}),Zo.json=function(n,t){return kt(n,"application/json",Yo,t)},Zo.html=function(n,t){return kt(n,"text/html",Io,t)},Zo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Zo):"object"==typeof module&&module.exports&&(module.exports=Zo),this.d3=Zo}(); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/.gitignore b/static/js/libs/heatmap.js-2.0.5/.gitignore new file mode 100644 index 00000000..1244fb8b --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/.gitignore @@ -0,0 +1,5 @@ +node_modules +.DS_Store +support +.idea +dist \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/CONTRIBUTE.md b/static/js/libs/heatmap.js-2.0.5/CONTRIBUTE.md new file mode 100644 index 00000000..dd3e544a --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/CONTRIBUTE.md @@ -0,0 +1,42 @@ +# How to contribute to heatmap.js + +@ TODO: more + +## Prerequisites + +- npm +- grunt-cli +- Texteditor (recommended: Sublime) + +## Coding Style + +### Tabs or Spaces? + +Spaces! 2 spaces. + +## Typical Workflow of a Contribution to heatmap.js + +A contribution to heatmap.js is not a plugin. If you want to contribute a plugin a similar workflow applies but you don't have to run the watcher (because it won't go into the build). + +### Checkout repository + +### Install + +`npm install` + +### Create a new feature branch + +### Add new file to watcher + +If you're introducing a new file you'll have to add it to the `package.json` 's buildFiles + +### Run watcher + +`grunt` + +### Add your code + +### Add an example/tests + +### Create pull request + diff --git a/static/js/libs/heatmap.js-2.0.5/Gruntfile.js b/static/js/libs/heatmap.js-2.0.5/Gruntfile.js new file mode 100644 index 00000000..c882ec85 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/Gruntfile.js @@ -0,0 +1,73 @@ +/*global module:false*/ +module.exports = function(grunt) { + + var packagejson = grunt.file.readJSON('package.json'); + // Project configuration. + grunt.initConfig({ + // Metadata. + pkg: packagejson, + banner: '/*\n * <%= pkg.title || pkg.name %> v<%= pkg.version %> | JavaScript Heatmap Library\n *\n * Copyright 2008-2016 Patrick Wied <heatmapjs@patrick-wied.at> - All rights reserved.\n * Dual licensed under MIT and Beerware license \n *\n * :: <%= grunt.template.today("yyyy-mm-dd HH:MM") %>\n */\n', + // Task configuration. + concat: { + options: { + banner: '<%= banner %>'+';(function (name, context, factory) {\n\n // Supports UMD. AMD, CommonJS/Node.js and browser context\n if (typeof module !== "undefined" && module.exports) {\n module.exports = factory();\n } else if (typeof define === "function" && define.amd) {\n define(factory);\n } else {\n context[name] = factory();\n }\n\n})("h337", this, function () {\n', + footer: '\n\n});' + }, + dist: { + src: packagejson.buildFiles, + dest: 'build/heatmap.js' + } + }, + uglify: { + options: { + banner: '<%= banner %>', + mangle: true, + compress: false, //compress must be false, otherwise behaviour change!!!!! + beautify: false + }, + dist: { + src: 'build/heatmap.js', + dest: 'build/heatmap.min.js' + } + }, + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + unused: true, + boss: true, + eqnull: true, + browser: true + }, + gruntfile: { + src: 'Gruntfile.js' + } + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + dist: { + files: packagejson.buildFiles, + tasks: ['concat', 'jshint', 'uglify'] + } + } + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + + // Default task. + grunt.registerTask('default', ['concat', 'jshint', 'uglify', 'watch']); +}; diff --git a/static/js/libs/heatmap.js-2.0.5/LICENSE b/static/js/libs/heatmap.js-2.0.5/LICENSE new file mode 100644 index 00000000..4a0d5ce9 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Patrick Wied + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/README.md b/static/js/libs/heatmap.js-2.0.5/README.md new file mode 100644 index 00000000..457e58ac --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/README.md @@ -0,0 +1,55 @@ +# heatmap.js +Dynamic Heatmaps for the Web. + +[<img src="http://www.patrick-wied.at/static/heatmapjs/assets/img/heatmapjs-examples-docs-banner.jpg" width="100%">](http://www.patrick-wied.at/static/heatmapjs/?utm_source=gh "View the heatmap.js website with usage examples, showcases, best practises, plugins ( googlemaps heatmap, leaflet) and more.") + +## How to get started + +The fastest way to get started is to install heatmap.js with bower. Just run the following command: + +`bower install heatmap.js-amd` + +This will download the latest working version of heatmap.js and put it in your bower_components folder. + +Alternatively you could just download [the latest release](https://github.com/pa7/heatmap.js/releases) from github and unzip it. + + +The file you're ultimately looking for is **heatmap.js** or **heatmap.min.js** + + + +heatmap.js is also hosted on npm: + +`npm install heatmap.js` + + + +### How to run the local examples + +Start a webserver (e.g. python SimpleHTTPServer from the project directory root): + +`python -m SimpleHTTPServer 1337 &` + +Then browse to + +`http://localhost:1337/examples/` + + +## Get involved + +Please have a look at the [contribution guidelines](CONTRIBUTE.md) before submitting contributions. + +**Disclaimer**: PRs can take time to receive feedback or be merged ( I'm only one person with very little time ) but I'm trying to get back to everyone eventually + +## Questions? + +In order to keep technical questions in a central place where other people can learn from it, the best thing you can do is [post your question to stackoverflow with the tag **heatmap.js**.](http://stackoverflow.com/questions/ask?tags=heatmap.js) + +If you do have a very specific question (or need commercial support) don't hesitate to contact me directly [via email](mailto:heatmap-q@patrick-wied.at). + + +## Mailing list + +Want to receive the latest updates and news about heatmap.js? + +There is a [mailing list](http://eepurl.com/0mmV5). No spam, just news and important updates. diff --git a/static/js/libs/heatmap.js-2.0.5/bower.json b/static/js/libs/heatmap.js-2.0.5/bower.json new file mode 100644 index 00000000..12a798f4 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/bower.json @@ -0,0 +1,30 @@ +{ + "name": "heatmap.js-amd", + "description": "Dynamic JavaScript Heatmaps for the Web", + "main": "build/heatmap.min.js", + "homepage": "http://www.patrick-wied.at/static/heatmapjs/", + "authors": [ + "Patrick Wied <contact@patrick-wied.at>" + ], + "repository": { + "type": "git", + "url": "https://github.com/pa7/heatmap.js.git" + }, + "keywords": [ + "heatmap", "heat map", "heatmaps", "canvas", "html5", "web heatmaps" + ], + "main": [ + "build/heatmap.js", + "plugins/gmaps-heatmap.js", + "plugins/leaflet-heatmap.js", + "plugins/svg-area-heatmap.js" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/static/js/libs/heatmap.js-2.0.5/build/heatmap.js b/static/js/libs/heatmap.js-2.0.5/build/heatmap.js new file mode 100644 index 00000000..3eee39ea --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/build/heatmap.js @@ -0,0 +1,724 @@ +/* + * heatmap.js v2.0.5 | JavaScript Heatmap Library + * + * Copyright 2008-2016 Patrick Wied <heatmapjs@patrick-wied.at> - All rights reserved. + * Dual licensed under MIT and Beerware license + * + * :: 2016-09-05 01:16 + */ +;(function (name, context, factory) { + + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + module.exports = factory(); + } else if (typeof define === "function" && define.amd) { + define(factory); + } else { + context[name] = factory(); + } + +})("h337", this, function () { + +// Heatmap Config stores default values and will be merged with instance config +var HeatmapConfig = { + defaultRadius: 40, + defaultRenderer: 'canvas2d', + defaultGradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + defaultMaxOpacity: 1, + defaultMinOpacity: 0, + defaultBlur: .85, + defaultXField: 'x', + defaultYField: 'y', + defaultValueField: 'value', + plugins: {} +}; +var Store = (function StoreClosure() { + + var Store = function Store(config) { + this._coordinator = {}; + this._data = []; + this._radi = []; + this._min = 10; + this._max = 1; + this._xField = config['xField'] || config.defaultXField; + this._yField = config['yField'] || config.defaultYField; + this._valueField = config['valueField'] || config.defaultValueField; + + if (config["radius"]) { + this._cfgRadius = config["radius"]; + } + }; + + var defaultRadius = HeatmapConfig.defaultRadius; + + Store.prototype = { + // when forceRender = false -> called from setData, omits renderall event + _organiseData: function(dataPoint, forceRender) { + var x = dataPoint[this._xField]; + var y = dataPoint[this._yField]; + var radi = this._radi; + var store = this._data; + var max = this._max; + var min = this._min; + var value = dataPoint[this._valueField] || 1; + var radius = dataPoint.radius || this._cfgRadius || defaultRadius; + + if (!store[x]) { + store[x] = []; + radi[x] = []; + } + + if (!store[x][y]) { + store[x][y] = value; + radi[x][y] = radius; + } else { + store[x][y] += value; + } + var storedVal = store[x][y]; + + if (storedVal > max) { + if (!forceRender) { + this._max = storedVal; + } else { + this.setDataMax(storedVal); + } + return false; + } else if (storedVal < min) { + if (!forceRender) { + this._min = storedVal; + } else { + this.setDataMin(storedVal); + } + return false; + } else { + return { + x: x, + y: y, + value: value, + radius: radius, + min: min, + max: max + }; + } + }, + _unOrganizeData: function() { + var unorganizedData = []; + var data = this._data; + var radi = this._radi; + + for (var x in data) { + for (var y in data[x]) { + + unorganizedData.push({ + x: x, + y: y, + radius: radi[x][y], + value: data[x][y] + }); + + } + } + return { + min: this._min, + max: this._max, + data: unorganizedData + }; + }, + _onExtremaChange: function() { + this._coordinator.emit('extremachange', { + min: this._min, + max: this._max + }); + }, + addData: function() { + if (arguments[0].length > 0) { + var dataArr = arguments[0]; + var dataLen = dataArr.length; + while (dataLen--) { + this.addData.call(this, dataArr[dataLen]); + } + } else { + // add to store + var organisedEntry = this._organiseData(arguments[0], true); + if (organisedEntry) { + // if it's the first datapoint initialize the extremas with it + if (this._data.length === 0) { + this._min = this._max = organisedEntry.value; + } + this._coordinator.emit('renderpartial', { + min: this._min, + max: this._max, + data: [organisedEntry] + }); + } + } + return this; + }, + setData: function(data) { + var dataPoints = data.data; + var pointsLen = dataPoints.length; + + + // reset data arrays + this._data = []; + this._radi = []; + + for(var i = 0; i < pointsLen; i++) { + this._organiseData(dataPoints[i], false); + } + this._max = data.max; + this._min = data.min || 0; + + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + removeData: function() { + // TODO: implement + }, + setDataMax: function(max) { + this._max = max; + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + setDataMin: function(min) { + this._min = min; + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + setCoordinator: function(coordinator) { + this._coordinator = coordinator; + }, + _getInternalData: function() { + return { + max: this._max, + min: this._min, + data: this._data, + radi: this._radi + }; + }, + getData: function() { + return this._unOrganizeData(); + }/*, + + TODO: rethink. + + getValueAt: function(point) { + var value; + var radius = 100; + var x = point.x; + var y = point.y; + var data = this._data; + + if (data[x] && data[x][y]) { + return data[x][y]; + } else { + var values = []; + // radial search for datapoints based on default radius + for(var distance = 1; distance < radius; distance++) { + var neighbors = distance * 2 +1; + var startX = x - distance; + var startY = y - distance; + + for(var i = 0; i < neighbors; i++) { + for (var o = 0; o < neighbors; o++) { + if ((i == 0 || i == neighbors-1) || (o == 0 || o == neighbors-1)) { + if (data[startY+i] && data[startY+i][startX+o]) { + values.push(data[startY+i][startX+o]); + } + } else { + continue; + } + } + } + } + if (values.length > 0) { + return Math.max.apply(Math, values); + } + } + return false; + }*/ + }; + + + return Store; +})(); + +var Canvas2dRenderer = (function Canvas2dRendererClosure() { + + var _getColorPalette = function(config) { + var gradientConfig = config.gradient || config.defaultGradient; + var paletteCanvas = document.createElement('canvas'); + var paletteCtx = paletteCanvas.getContext('2d'); + + paletteCanvas.width = 256; + paletteCanvas.height = 1; + + var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); + for (var key in gradientConfig) { + gradient.addColorStop(key, gradientConfig[key]); + } + + paletteCtx.fillStyle = gradient; + paletteCtx.fillRect(0, 0, 256, 1); + + return paletteCtx.getImageData(0, 0, 256, 1).data; + }; + + var _getPointTemplate = function(radius, blurFactor) { + var tplCanvas = document.createElement('canvas'); + var tplCtx = tplCanvas.getContext('2d'); + var x = radius; + var y = radius; + tplCanvas.width = tplCanvas.height = radius*2; + + if (blurFactor == 1) { + tplCtx.beginPath(); + tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false); + tplCtx.fillStyle = 'rgba(0,0,0,1)'; + tplCtx.fill(); + } else { + var gradient = tplCtx.createRadialGradient(x, y, radius*blurFactor, x, y, radius); + gradient.addColorStop(0, 'rgba(0,0,0,1)'); + gradient.addColorStop(1, 'rgba(0,0,0,0)'); + tplCtx.fillStyle = gradient; + tplCtx.fillRect(0, 0, 2*radius, 2*radius); + } + + + + return tplCanvas; + }; + + var _prepareData = function(data) { + var renderData = []; + var min = data.min; + var max = data.max; + var radi = data.radi; + var data = data.data; + + var xValues = Object.keys(data); + var xValuesLen = xValues.length; + + while(xValuesLen--) { + var xValue = xValues[xValuesLen]; + var yValues = Object.keys(data[xValue]); + var yValuesLen = yValues.length; + while(yValuesLen--) { + var yValue = yValues[yValuesLen]; + var value = data[xValue][yValue]; + var radius = radi[xValue][yValue]; + renderData.push({ + x: xValue, + y: yValue, + value: value, + radius: radius + }); + } + } + + return { + min: min, + max: max, + data: renderData + }; + }; + + + function Canvas2dRenderer(config) { + var container = config.container; + var shadowCanvas = this.shadowCanvas = document.createElement('canvas'); + var canvas = this.canvas = config.canvas || document.createElement('canvas'); + var renderBoundaries = this._renderBoundaries = [10000, 10000, 0, 0]; + + var computed = getComputedStyle(config.container) || {}; + + canvas.className = 'heatmap-canvas'; + + this._width = canvas.width = shadowCanvas.width = config.width || +(computed.width.replace(/px/,'')); + this._height = canvas.height = shadowCanvas.height = config.height || +(computed.height.replace(/px/,'')); + + this.shadowCtx = shadowCanvas.getContext('2d'); + this.ctx = canvas.getContext('2d'); + + // @TODO: + // conditional wrapper + + canvas.style.cssText = shadowCanvas.style.cssText = 'position:absolute;left:0;top:0;'; + + container.style.position = 'relative'; + container.appendChild(canvas); + + this._palette = _getColorPalette(config); + this._templates = {}; + + this._setStyles(config); + }; + + Canvas2dRenderer.prototype = { + renderPartial: function(data) { + if (data.data.length > 0) { + this._drawAlpha(data); + this._colorize(); + } + }, + renderAll: function(data) { + // reset render boundaries + this._clear(); + if (data.data.length > 0) { + this._drawAlpha(_prepareData(data)); + this._colorize(); + } + }, + _updateGradient: function(config) { + this._palette = _getColorPalette(config); + }, + updateConfig: function(config) { + if (config['gradient']) { + this._updateGradient(config); + } + this._setStyles(config); + }, + setDimensions: function(width, height) { + this._width = width; + this._height = height; + this.canvas.width = this.shadowCanvas.width = width; + this.canvas.height = this.shadowCanvas.height = height; + }, + _clear: function() { + this.shadowCtx.clearRect(0, 0, this._width, this._height); + this.ctx.clearRect(0, 0, this._width, this._height); + }, + _setStyles: function(config) { + this._blur = (config.blur == 0)?0:(config.blur || config.defaultBlur); + + if (config.backgroundColor) { + this.canvas.style.backgroundColor = config.backgroundColor; + } + + this._width = this.canvas.width = this.shadowCanvas.width = config.width || this._width; + this._height = this.canvas.height = this.shadowCanvas.height = config.height || this._height; + + + this._opacity = (config.opacity || 0) * 255; + this._maxOpacity = (config.maxOpacity || config.defaultMaxOpacity) * 255; + this._minOpacity = (config.minOpacity || config.defaultMinOpacity) * 255; + this._useGradientOpacity = !!config.useGradientOpacity; + }, + _drawAlpha: function(data) { + var min = this._min = data.min; + var max = this._max = data.max; + var data = data.data || []; + var dataLen = data.length; + // on a point basis? + var blur = 1 - this._blur; + + while(dataLen--) { + + var point = data[dataLen]; + + var x = point.x; + var y = point.y; + var radius = point.radius; + // if value is bigger than max + // use max as value + var value = Math.min(point.value, max); + var rectX = x - radius; + var rectY = y - radius; + var shadowCtx = this.shadowCtx; + + + + + var tpl; + if (!this._templates[radius]) { + this._templates[radius] = tpl = _getPointTemplate(radius, blur); + } else { + tpl = this._templates[radius]; + } + // value from minimum / value range + // => [0, 1] + var templateAlpha = (value-min)/(max-min); + // this fixes #176: small values are not visible because globalAlpha < .01 cannot be read from imageData + shadowCtx.globalAlpha = templateAlpha < .01 ? .01 : templateAlpha; + + shadowCtx.drawImage(tpl, rectX, rectY); + + // update renderBoundaries + if (rectX < this._renderBoundaries[0]) { + this._renderBoundaries[0] = rectX; + } + if (rectY < this._renderBoundaries[1]) { + this._renderBoundaries[1] = rectY; + } + if (rectX + 2*radius > this._renderBoundaries[2]) { + this._renderBoundaries[2] = rectX + 2*radius; + } + if (rectY + 2*radius > this._renderBoundaries[3]) { + this._renderBoundaries[3] = rectY + 2*radius; + } + + } + }, + _colorize: function() { + var x = this._renderBoundaries[0]; + var y = this._renderBoundaries[1]; + var width = this._renderBoundaries[2] - x; + var height = this._renderBoundaries[3] - y; + var maxWidth = this._width; + var maxHeight = this._height; + var opacity = this._opacity; + var maxOpacity = this._maxOpacity; + var minOpacity = this._minOpacity; + var useGradientOpacity = this._useGradientOpacity; + + if (x < 0) { + x = 0; + } + if (y < 0) { + y = 0; + } + if (x + width > maxWidth) { + width = maxWidth - x; + } + if (y + height > maxHeight) { + height = maxHeight - y; + } + + var img = this.shadowCtx.getImageData(x, y, width, height); + var imgData = img.data; + var len = imgData.length; + var palette = this._palette; + + + for (var i = 3; i < len; i+= 4) { + var alpha = imgData[i]; + var offset = alpha * 4; + + + if (!offset) { + continue; + } + + var finalAlpha; + if (opacity > 0) { + finalAlpha = opacity; + } else { + if (alpha < maxOpacity) { + if (alpha < minOpacity) { + finalAlpha = minOpacity; + } else { + finalAlpha = alpha; + } + } else { + finalAlpha = maxOpacity; + } + } + + imgData[i-3] = palette[offset]; + imgData[i-2] = palette[offset + 1]; + imgData[i-1] = palette[offset + 2]; + imgData[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha; + + } + + img.data = imgData; + this.ctx.putImageData(img, x, y); + + this._renderBoundaries = [1000, 1000, 0, 0]; + + }, + getValueAt: function(point) { + var value; + var shadowCtx = this.shadowCtx; + var img = shadowCtx.getImageData(point.x, point.y, 1, 1); + var data = img.data[3]; + var max = this._max; + var min = this._min; + + value = (Math.abs(max-min) * (data/255)) >> 0; + + return value; + }, + getDataURL: function() { + return this.canvas.toDataURL(); + } + }; + + + return Canvas2dRenderer; +})(); + + +var Renderer = (function RendererClosure() { + + var rendererFn = false; + + if (HeatmapConfig['defaultRenderer'] === 'canvas2d') { + rendererFn = Canvas2dRenderer; + } + + return rendererFn; +})(); + + +var Util = { + merge: function() { + var merged = {}; + var argsLen = arguments.length; + for (var i = 0; i < argsLen; i++) { + var obj = arguments[i] + for (var key in obj) { + merged[key] = obj[key]; + } + } + return merged; + } +}; +// Heatmap Constructor +var Heatmap = (function HeatmapClosure() { + + var Coordinator = (function CoordinatorClosure() { + + function Coordinator() { + this.cStore = {}; + }; + + Coordinator.prototype = { + on: function(evtName, callback, scope) { + var cStore = this.cStore; + + if (!cStore[evtName]) { + cStore[evtName] = []; + } + cStore[evtName].push((function(data) { + return callback.call(scope, data); + })); + }, + emit: function(evtName, data) { + var cStore = this.cStore; + if (cStore[evtName]) { + var len = cStore[evtName].length; + for (var i=0; i<len; i++) { + var callback = cStore[evtName][i]; + callback(data); + } + } + } + }; + + return Coordinator; + })(); + + + var _connect = function(scope) { + var renderer = scope._renderer; + var coordinator = scope._coordinator; + var store = scope._store; + + coordinator.on('renderpartial', renderer.renderPartial, renderer); + coordinator.on('renderall', renderer.renderAll, renderer); + coordinator.on('extremachange', function(data) { + scope._config.onExtremaChange && + scope._config.onExtremaChange({ + min: data.min, + max: data.max, + gradient: scope._config['gradient'] || scope._config['defaultGradient'] + }); + }); + store.setCoordinator(coordinator); + }; + + + function Heatmap() { + var config = this._config = Util.merge(HeatmapConfig, arguments[0] || {}); + this._coordinator = new Coordinator(); + if (config['plugin']) { + var pluginToLoad = config['plugin']; + if (!HeatmapConfig.plugins[pluginToLoad]) { + throw new Error('Plugin \''+ pluginToLoad + '\' not found. Maybe it was not registered.'); + } else { + var plugin = HeatmapConfig.plugins[pluginToLoad]; + // set plugin renderer and store + this._renderer = new plugin.renderer(config); + this._store = new plugin.store(config); + } + } else { + this._renderer = new Renderer(config); + this._store = new Store(config); + } + _connect(this); + }; + + // @TODO: + // add API documentation + Heatmap.prototype = { + addData: function() { + this._store.addData.apply(this._store, arguments); + return this; + }, + removeData: function() { + this._store.removeData && this._store.removeData.apply(this._store, arguments); + return this; + }, + setData: function() { + this._store.setData.apply(this._store, arguments); + return this; + }, + setDataMax: function() { + this._store.setDataMax.apply(this._store, arguments); + return this; + }, + setDataMin: function() { + this._store.setDataMin.apply(this._store, arguments); + return this; + }, + configure: function(config) { + this._config = Util.merge(this._config, config); + this._renderer.updateConfig(this._config); + this._coordinator.emit('renderall', this._store._getInternalData()); + return this; + }, + repaint: function() { + this._coordinator.emit('renderall', this._store._getInternalData()); + return this; + }, + getData: function() { + return this._store.getData(); + }, + getDataURL: function() { + return this._renderer.getDataURL(); + }, + getValueAt: function(point) { + + if (this._store.getValueAt) { + return this._store.getValueAt(point); + } else if (this._renderer.getValueAt) { + return this._renderer.getValueAt(point); + } else { + return null; + } + } + }; + + return Heatmap; + +})(); + + +// core +var heatmapFactory = { + create: function(config) { + return new Heatmap(config); + }, + register: function(pluginKey, plugin) { + HeatmapConfig.plugins[pluginKey] = plugin; + } +}; + +return heatmapFactory; + + +}); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/build/heatmap.min.js b/static/js/libs/heatmap.js-2.0.5/build/heatmap.min.js new file mode 100644 index 00000000..f92a6605 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/build/heatmap.min.js @@ -0,0 +1,9 @@ +/* + * heatmap.js v2.0.5 | JavaScript Heatmap Library + * + * Copyright 2008-2016 Patrick Wied <heatmapjs@patrick-wied.at> - All rights reserved. + * Dual licensed under MIT and Beerware license + * + * :: 2016-09-05 01:16 + */ +(function(a,b,c){if(typeof module!=="undefined"&&module.exports){module.exports=c()}else if(typeof define==="function"&&define.amd){define(c)}else{b[a]=c()}})("h337",this,function(){var a={defaultRadius:40,defaultRenderer:"canvas2d",defaultGradient:{.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},defaultMaxOpacity:1,defaultMinOpacity:0,defaultBlur:.85,defaultXField:"x",defaultYField:"y",defaultValueField:"value",plugins:{}};var b=function h(){var b=function d(a){this._coordinator={};this._data=[];this._radi=[];this._min=10;this._max=1;this._xField=a["xField"]||a.defaultXField;this._yField=a["yField"]||a.defaultYField;this._valueField=a["valueField"]||a.defaultValueField;if(a["radius"]){this._cfgRadius=a["radius"]}};var c=a.defaultRadius;b.prototype={_organiseData:function(a,b){var d=a[this._xField];var e=a[this._yField];var f=this._radi;var g=this._data;var h=this._max;var i=this._min;var j=a[this._valueField]||1;var k=a.radius||this._cfgRadius||c;if(!g[d]){g[d]=[];f[d]=[]}if(!g[d][e]){g[d][e]=j;f[d][e]=k}else{g[d][e]+=j}var l=g[d][e];if(l>h){if(!b){this._max=l}else{this.setDataMax(l)}return false}else if(l<i){if(!b){this._min=l}else{this.setDataMin(l)}return false}else{return{x:d,y:e,value:j,radius:k,min:i,max:h}}},_unOrganizeData:function(){var a=[];var b=this._data;var c=this._radi;for(var d in b){for(var e in b[d]){a.push({x:d,y:e,radius:c[d][e],value:b[d][e]})}}return{min:this._min,max:this._max,data:a}},_onExtremaChange:function(){this._coordinator.emit("extremachange",{min:this._min,max:this._max})},addData:function(){if(arguments[0].length>0){var a=arguments[0];var b=a.length;while(b--){this.addData.call(this,a[b])}}else{var c=this._organiseData(arguments[0],true);if(c){if(this._data.length===0){this._min=this._max=c.value}this._coordinator.emit("renderpartial",{min:this._min,max:this._max,data:[c]})}}return this},setData:function(a){var b=a.data;var c=b.length;this._data=[];this._radi=[];for(var d=0;d<c;d++){this._organiseData(b[d],false)}this._max=a.max;this._min=a.min||0;this._onExtremaChange();this._coordinator.emit("renderall",this._getInternalData());return this},removeData:function(){},setDataMax:function(a){this._max=a;this._onExtremaChange();this._coordinator.emit("renderall",this._getInternalData());return this},setDataMin:function(a){this._min=a;this._onExtremaChange();this._coordinator.emit("renderall",this._getInternalData());return this},setCoordinator:function(a){this._coordinator=a},_getInternalData:function(){return{max:this._max,min:this._min,data:this._data,radi:this._radi}},getData:function(){return this._unOrganizeData()}};return b}();var c=function i(){var a=function(a){var b=a.gradient||a.defaultGradient;var c=document.createElement("canvas");var d=c.getContext("2d");c.width=256;c.height=1;var e=d.createLinearGradient(0,0,256,1);for(var f in b){e.addColorStop(f,b[f])}d.fillStyle=e;d.fillRect(0,0,256,1);return d.getImageData(0,0,256,1).data};var b=function(a,b){var c=document.createElement("canvas");var d=c.getContext("2d");var e=a;var f=a;c.width=c.height=a*2;if(b==1){d.beginPath();d.arc(e,f,a,0,2*Math.PI,false);d.fillStyle="rgba(0,0,0,1)";d.fill()}else{var g=d.createRadialGradient(e,f,a*b,e,f,a);g.addColorStop(0,"rgba(0,0,0,1)");g.addColorStop(1,"rgba(0,0,0,0)");d.fillStyle=g;d.fillRect(0,0,2*a,2*a)}return c};var c=function(a){var b=[];var c=a.min;var d=a.max;var e=a.radi;var a=a.data;var f=Object.keys(a);var g=f.length;while(g--){var h=f[g];var i=Object.keys(a[h]);var j=i.length;while(j--){var k=i[j];var l=a[h][k];var m=e[h][k];b.push({x:h,y:k,value:l,radius:m})}}return{min:c,max:d,data:b}};function d(b){var c=b.container;var d=this.shadowCanvas=document.createElement("canvas");var e=this.canvas=b.canvas||document.createElement("canvas");var f=this._renderBoundaries=[1e4,1e4,0,0];var g=getComputedStyle(b.container)||{};e.className="heatmap-canvas";this._width=e.width=d.width=b.width||+g.width.replace(/px/,"");this._height=e.height=d.height=b.height||+g.height.replace(/px/,"");this.shadowCtx=d.getContext("2d");this.ctx=e.getContext("2d");e.style.cssText=d.style.cssText="position:absolute;left:0;top:0;";c.style.position="relative";c.appendChild(e);this._palette=a(b);this._templates={};this._setStyles(b)}d.prototype={renderPartial:function(a){if(a.data.length>0){this._drawAlpha(a);this._colorize()}},renderAll:function(a){this._clear();if(a.data.length>0){this._drawAlpha(c(a));this._colorize()}},_updateGradient:function(b){this._palette=a(b)},updateConfig:function(a){if(a["gradient"]){this._updateGradient(a)}this._setStyles(a)},setDimensions:function(a,b){this._width=a;this._height=b;this.canvas.width=this.shadowCanvas.width=a;this.canvas.height=this.shadowCanvas.height=b},_clear:function(){this.shadowCtx.clearRect(0,0,this._width,this._height);this.ctx.clearRect(0,0,this._width,this._height)},_setStyles:function(a){this._blur=a.blur==0?0:a.blur||a.defaultBlur;if(a.backgroundColor){this.canvas.style.backgroundColor=a.backgroundColor}this._width=this.canvas.width=this.shadowCanvas.width=a.width||this._width;this._height=this.canvas.height=this.shadowCanvas.height=a.height||this._height;this._opacity=(a.opacity||0)*255;this._maxOpacity=(a.maxOpacity||a.defaultMaxOpacity)*255;this._minOpacity=(a.minOpacity||a.defaultMinOpacity)*255;this._useGradientOpacity=!!a.useGradientOpacity},_drawAlpha:function(a){var c=this._min=a.min;var d=this._max=a.max;var a=a.data||[];var e=a.length;var f=1-this._blur;while(e--){var g=a[e];var h=g.x;var i=g.y;var j=g.radius;var k=Math.min(g.value,d);var l=h-j;var m=i-j;var n=this.shadowCtx;var o;if(!this._templates[j]){this._templates[j]=o=b(j,f)}else{o=this._templates[j]}var p=(k-c)/(d-c);n.globalAlpha=p<.01?.01:p;n.drawImage(o,l,m);if(l<this._renderBoundaries[0]){this._renderBoundaries[0]=l}if(m<this._renderBoundaries[1]){this._renderBoundaries[1]=m}if(l+2*j>this._renderBoundaries[2]){this._renderBoundaries[2]=l+2*j}if(m+2*j>this._renderBoundaries[3]){this._renderBoundaries[3]=m+2*j}}},_colorize:function(){var a=this._renderBoundaries[0];var b=this._renderBoundaries[1];var c=this._renderBoundaries[2]-a;var d=this._renderBoundaries[3]-b;var e=this._width;var f=this._height;var g=this._opacity;var h=this._maxOpacity;var i=this._minOpacity;var j=this._useGradientOpacity;if(a<0){a=0}if(b<0){b=0}if(a+c>e){c=e-a}if(b+d>f){d=f-b}var k=this.shadowCtx.getImageData(a,b,c,d);var l=k.data;var m=l.length;var n=this._palette;for(var o=3;o<m;o+=4){var p=l[o];var q=p*4;if(!q){continue}var r;if(g>0){r=g}else{if(p<h){if(p<i){r=i}else{r=p}}else{r=h}}l[o-3]=n[q];l[o-2]=n[q+1];l[o-1]=n[q+2];l[o]=j?n[q+3]:r}k.data=l;this.ctx.putImageData(k,a,b);this._renderBoundaries=[1e3,1e3,0,0]},getValueAt:function(a){var b;var c=this.shadowCtx;var d=c.getImageData(a.x,a.y,1,1);var e=d.data[3];var f=this._max;var g=this._min;b=Math.abs(f-g)*(e/255)>>0;return b},getDataURL:function(){return this.canvas.toDataURL()}};return d}();var d=function j(){var b=false;if(a["defaultRenderer"]==="canvas2d"){b=c}return b}();var e={merge:function(){var a={};var b=arguments.length;for(var c=0;c<b;c++){var d=arguments[c];for(var e in d){a[e]=d[e]}}return a}};var f=function k(){var c=function h(){function a(){this.cStore={}}a.prototype={on:function(a,b,c){var d=this.cStore;if(!d[a]){d[a]=[]}d[a].push(function(a){return b.call(c,a)})},emit:function(a,b){var c=this.cStore;if(c[a]){var d=c[a].length;for(var e=0;e<d;e++){var f=c[a][e];f(b)}}}};return a}();var f=function(a){var b=a._renderer;var c=a._coordinator;var d=a._store;c.on("renderpartial",b.renderPartial,b);c.on("renderall",b.renderAll,b);c.on("extremachange",function(b){a._config.onExtremaChange&&a._config.onExtremaChange({min:b.min,max:b.max,gradient:a._config["gradient"]||a._config["defaultGradient"]})});d.setCoordinator(c)};function g(){var g=this._config=e.merge(a,arguments[0]||{});this._coordinator=new c;if(g["plugin"]){var h=g["plugin"];if(!a.plugins[h]){throw new Error("Plugin '"+h+"' not found. Maybe it was not registered.")}else{var i=a.plugins[h];this._renderer=new i.renderer(g);this._store=new i.store(g)}}else{this._renderer=new d(g);this._store=new b(g)}f(this)}g.prototype={addData:function(){this._store.addData.apply(this._store,arguments);return this},removeData:function(){this._store.removeData&&this._store.removeData.apply(this._store,arguments);return this},setData:function(){this._store.setData.apply(this._store,arguments);return this},setDataMax:function(){this._store.setDataMax.apply(this._store,arguments);return this},setDataMin:function(){this._store.setDataMin.apply(this._store,arguments);return this},configure:function(a){this._config=e.merge(this._config,a);this._renderer.updateConfig(this._config);this._coordinator.emit("renderall",this._store._getInternalData());return this},repaint:function(){this._coordinator.emit("renderall",this._store._getInternalData());return this},getData:function(){return this._store.getData()},getDataURL:function(){return this._renderer.getDataURL()},getValueAt:function(a){if(this._store.getValueAt){return this._store.getValueAt(a)}else if(this._renderer.getValueAt){return this._renderer.getValueAt(a)}else{return null}}};return g}();var g={create:function(a){return new f(a)},register:function(b,c){a.plugins[b]=c}};return g}); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/docs/assets/css/commons.css b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/commons.css new file mode 100644 index 00000000..0a94c687 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/commons.css @@ -0,0 +1,41 @@ +html, body, p, div { margin:0; padding:0; } +.wrapper { width:840px; position:relative; margin:auto; } + +.breadcrumb-trail { + list-style:none; + list-style-type:none; + display:block; + font-size:10pt; + margin-top:0; + margin-bottom:0; + padding-left:0; +} +.breadcrumb-trail li { + display:inline-block; + padding:5px; + margin-right:15px; + position:relative; + line-height:normal; +} +.breadcrumb-trail a { + text-decoration:none; + color:blue; + font-weight:400; + padding-bottom:1px; + +} +.breadcrumb-trail a:hover { + border-bottom:1px solid blue; +} +.breadcrumb-trail li:before{ + content:'\0BB'; + position:absolute; + left:-14px; + top:0px; + font-weight:normal; + font-size:14pt; +} +.breadcrumb-trail li:first-child:before { + content:''; + margin-left:0; +} \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/docs/assets/css/docs.css b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/docs.css new file mode 100644 index 00000000..e845c0a0 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/docs.css @@ -0,0 +1,136 @@ +html { + color: #333; + font-family: sans-serif; + font-size: 16pt; + font-weight: 100; + line-height: 1.4em; + } + html, body, p, div { margin:0; padding:0; } +.hot-doc { + background:#f65656; +} +.avg-doc { + background:#54cb44; +} +.cold-doc { + background:#4C94FF; +} +.wrapper { + width:auto; + position:relative; + max-width:900px; + margin:auto; + padding-top:25px; +} +.description { + padding:10px; + line-height: 28px; +} +strong.highlight { + padding: 4px; + font-weight: normal; + color:white; +} +.functions .description { + background:white; + margin-bottom: 5px; +} +.fn { box-shadow:0 1px 1px rgba(0,0,0,.23); } +.fn h3 { + padding:10px; + font-size:22px; + letter-spacing:1px; + font-weight:bold; + background:rgba(0, 0, 0, 0.11); +} + +h2 { padding-left:10px; } +h1 { text-align:center; margin-top:30px;} +ul { + list-style: none; + margin:0; + padding:0; +} + +li { + padding-left: 1em; + + text-indent: -1em; +} +#index li { + border-bottom:1px solid rgba(0,0,0,.3); + padding-top:8px; + padding-bottom:8px; +} + +#index li:before { + content: "+"; + padding-left:5px; + padding-right: 5px; +} +li:before { + content: "-"; + padding-left:5px; + padding-right: 5px; +} +li a { color:white; letter-spacing:1px;} +#index h2 { font-size:26px; padding-left:15px; padding-top:5px; margin-bottom:8px; } +#index div { + color: black; + display:inline-table; + box-shadow: 0 0 1px black; + width:45%; + margin-right:1%; + + overflow:hidden; +} +#index-heatmapInstance { width:51% !important;} +#index { width:65%; margin:auto; margin-top:30px; margin-bottom:50px; } +section { margin-bottom:60px; } +#message { + overflow:hidden; + width: 75%; + margin: auto; + margin-top: 30px; + background: rgba(0,0,0,.06); + box-shadow: 0 0 2px black; + padding-left:20px; + padding-right:20px; + margin-bottom:50px; +} +#message h3 { padding-left:0; font-weight:normal; cursor:pointer;} +#msg-content { + height:230px; padding-top:0; padding-bottom:0; opacity:1; +} +#msg-content.animate { + -webkit-transition:.7s ease all; + -moz-transition:.7s ease all; + transition:.7s ease all; +} +#msg-content.hide{ height:0; padding-left:20px; padding-right:20px; opacity:0; } +.msg { padding:10px;background:white; line-height:32px;} +#btn-confirm { + padding: 10px; +text-align: center; +background: #54cb44; +margin: auto; +color: white; +cursor: pointer; +-webkit-transition: 0.7s all ease; +-moz-transition:.7 all ease; +transition: 0.7s all ease; +border:none; +font-size:20px; +width: 150px; +margin-top: 15px; + +} +#btn-confirm:hover { + background: #f65656; +} +.description ul li { margin-bottom:15px; margin-top:10px; } + + +@media(max-width:800px) { + #message { display:none; } +} \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/docs/assets/css/prism.css b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/prism.css new file mode 100644 index 00000000..78b7a364 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/assets/css/prism.css @@ -0,0 +1,126 @@ +* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.builtin { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #a67f59; + background: hsla(0,0%,100%,.5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + + +.token.regex, +.token.important { + color: #e90; +} + +.token.important { + font-weight: bold; +} + +.token.entity { + cursor: help; +} \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/docs/assets/js/prism.js b/static/js/libs/heatmap.js-2.0.5/docs/assets/js/prism.js new file mode 100644 index 00000000..a5792710 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/assets/js/prism.js @@ -0,0 +1,7 @@ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ +var self=typeof window!="undefined"?window:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content)):t.util.type(e)==="Array"?e.map(t.util.encode):e.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;var l={element:r,language:o,grammar:u,code:f};t.hooks.run("before-highlight",l);if(i&&self.Worker){var c=new Worker(t.filename);c.onmessage=function(e){l.highlightedCode=n.stringify(JSON.parse(e.data),o);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(l.element);t.hooks.run("after-highlight",l)};c.postMessage(JSON.stringify({language:l.language,code:l.code}))}else{l.highlightedCode=t.highlight(l.code,l.grammar,l.language);t.hooks.run("before-insert",l);l.element.innerHTML=l.highlightedCode;s&&s.call(r);t.hooks.run("after-highlight",l)}},highlight:function(e,r,i){var s=t.tokenize(e,r);return n.stringify(t.util.encode(s),i)},tokenize:function(e,n,r){var i=t.Token,s=[e],o=n.rest;if(o){for(var u in o)n[u]=o[u];delete n.rest}e:for(var u in n){if(!n.hasOwnProperty(u)||!n[u])continue;var a=n[u],f=a.inside,l=!!a.lookbehind,c=0;a=a.pattern||a;for(var h=0;h<s.length;h++){var p=s[h];if(s.length>e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+"</"+s.tag+">"};if(!self.document){if(!self.addEventListener)return self.Prism;self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return self.Prism}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}return self.Prism}();typeof module!="undefined"&&module.exports&&(module.exports=Prism);; +Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/\&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,punctuation:/[\{\};:]/g,"function":/[-a-z0-9]+(?=\()/ig};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/ig,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; +Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}},number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/ig,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); +; diff --git a/static/js/libs/heatmap.js-2.0.5/docs/faq.html b/static/js/libs/heatmap.js-2.0.5/docs/faq.html new file mode 100644 index 00000000..e69de29b diff --git a/static/js/libs/heatmap.js-2.0.5/docs/getting-started.html b/static/js/libs/heatmap.js-2.0.5/docs/getting-started.html new file mode 100644 index 00000000..e69de29b diff --git a/static/js/libs/heatmap.js-2.0.5/docs/how-to-migrate.md b/static/js/libs/heatmap.js-2.0.5/docs/how-to-migrate.md new file mode 100644 index 00000000..1f656d73 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/how-to-migrate.md @@ -0,0 +1,97 @@ +# How to migrate from heatmap.js v1.0 to v2.0 + +This document will describe the major public API changes and how you have to adapt your code to make your project work with heatmap.js v2.0 + +## element -> container +I thought this would describe the config property better, now the element property should be called container property: + +```javascript + +var cfg = { + "container": domElement +}; + +``` + + +## opacity -> maxOpacity +With the new heatmap.js v2.0 the opacity config property is affecting the global opacity (it sets the opacity for all datapoints and prevents smooth gradients). If you want to achieve smooth datapoint gradients you now have to use the maxOpacity config property: + +```javascript + +var cfg = { + "maxOpacity": .8 +} +``` + +Also, opacity, maxOpacity, and minOpacity should now be a decimal number within [0,1]. + + +## Feeding heatmap.js with data + +I decided to reduce the API to a more flat structure. That means you don't have to access the datastore of a heatmap to add the data but rather can add the new data directly at your heatmap instance. I also got rid of naming redundance ( `heatmap.store.addDataPoint` -> `heatmap.addData`, `heatmap.store.setDataSet` -> `heatmap.setData`). + +```javascript +var datapoint = { x: 100, y: 100, value: 10 }; + +heatmap.addData(datapoint); + +heatmap.setData({ + max: 10, + data: [datapoint] +}); +``` + +Also, as you probably have noticed: the count property of a datapoint is now called value by default BUT for migration sake you can tell heatmap.js to use "count" as a valueField: + + +```javascript +var datapoint = { x: 100, y: 100, count: 10 }; + +var heatmap = h337.create({ + container: domElement, + // ... + valueField: 'count' +}); + +heatmap.addData(datapoint); + +heatmap.setData({ + max: 10, + data: [datapoint] +}); +``` + +--- + +# Summary + +Old configuration example: + +```javascript + +var cfg = { + "element": domElement, + "opacity": 80 +} + +var heatmap = h337.create(cfg); + +heatmap.store.setDataSet(data); +``` + +turns into new configuration: + +```javascript + +var cfg = { + "container": domElement, + "maxOpacity": .8 +} + +var heatmap = h337.create(cfg); + +heatmap.setData(data); +``` + +Have a look at the documentation (it's inside the repo at /docs/) to see the full API \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/docs/index.html b/static/js/libs/heatmap.js-2.0.5/docs/index.html new file mode 100644 index 00000000..6813a272 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/docs/index.html @@ -0,0 +1,276 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>heatmap.js Documentation</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="assets/css/commons.css" /> + <link rel="stylesheet" href="assets/css/docs.css" /> + <link rel="stylesheet" href="assets/css/prism.css" /> + </head> + <body> + <div class="wrapper"> + <h1>heatmap.js Documentation</h1> + <ol class="breadcrumb-trail"> + <li><a href="//www.patrick-wied.at/static/heatmapjs/" title="heatmap.js dynamic heatmaps for the web">heatmap.js</a></li> + <li>Documentation</li> + </ol> + <div id="message"> + <h3 id="activate-msg">What is it about the colors in the overview?</h3> + <div id="msg-content"> + <div class="msg"> + <u style="font-weight:bold;">The colors in the overview is a prioritization of API functions:</u> <br /><strong class="hot-doc highlight"><u>red</u> **hot docs**</strong> : most commonly used functions ;-)<br /><strong class="avg-doc highlight"><u>green</u></strong> : used for customized implementations<br /><strong class="cold-doc highlight"><u>blue</u></strong> : rarely used functionality + </div> + <div id="btn-confirm">got it, thank you</div> + </div> + </div> + <section id="index"> + <div id="index-h337"> + <h2>h337</h2> + <ul> + <li class="hot-doc"><a href="#h337-create">create(configObject)</a></li> + <li class="avg-doc"><a href="#h337-register">register(pluginKey, plugin)</a></li> + </ul> + </div> + <div id="index-heatmapInstance"> + <h2>heatmapInstance</h2> + <ul> + <li class="hot-doc"><a href="#heatmap-addData">addData(object|array)</a></li> + <li class="hot-doc"><a href="#heatmap-setData">setData(object)</a></li> + <li class="cold-doc"><a href="#heatmap-setDataMax">setDataMax(number)</a></li> + <li class="cold-doc"><a href="#heatmap-setDataMin">setDataMin(number)</a></li> + <li class="avg-doc"> <a href="#heatmap-configure">configure(configObject)</a></li> + <li class="avg-doc"> <a href="#heatmap-getValueAt">getValueAt(object)</a></li> + <li class="hot-doc"> <a href="#heatmap-getData">getData()</a></li> + <li class="avg-doc"> <a href="#heatmap-getDataURL">getDataURL()</a></li> + <li class="cold-doc"><a href="#heatmap-repaint">repaint()</a></li> + </ul> + </div> + + </section> + <section> + <h2>h337</h2> + <div class="description"> + "h337" is the name of the global object registered by heatmap.js. You can use it to create heatmap instances + </div> + <div class="functions"> + <div class="fn"> + <h3 id="h337-create">h337.create(configObject)</h3> + <div class="description"> + Returns a <strong>heatmapInstance</strong>.<br /><br /> + Use h337.create to create heatmap instances. A Heatmap can be customized with the configObject. <br />The configObject parameter is required. <br /><br/><strong><u>Possible configuration properties:</u></strong><br /> + <ul> + <li><strong>container</strong> (DOMNode) *required* <br /> A DOM node where the heatmap canvas should be appended (heatmap will adapt to the node's size)</li> + <li><strong>backgroundColor</strong> (string) *optional*<br /> + A background color string in form of hexcode, color name, or rgb(a)</li> + <li><strong>gradient</strong> (object) *optional*<br /> + An object that represents the gradient (syntax: number string [0,1] : color string), check out the example </li> + <li><strong>radius</strong> (number) *optional*<br />The radius each datapoint will have (if not specified on the datapoint itself)</li> + <li><strong>opacity</strong> (number) [0,1] *optional* default = .6<br />A global opacity for the whole heatmap. This overrides maxOpacity and minOpacity if set!</li> + <li><strong>maxOpacity</strong> (number) [0,1] *optional*<br />The maximal opacity the highest value in the heatmap will have. (will be overridden if opacity set)</li> + <li><strong>minOpacity</strong>(number) [0,1] *optional*<br />The minimum opacity the lowest value in the heatmap will have (will be overridden if opacity set)</li> + <li><strong>onExtremaChange</strong> function callback<br />Pass a callback to receive extrema change updates. Useful for DOM legends.</li> + <li><strong>blur</strong> (number) [0,1] *optional* default = 0.85<br />The blur factor that will be applied to all datapoints. The higher the blur factor is, the smoother the gradients will be</li> + <li><strong>xField</strong> (string) *optional* default = "x"<br />The property name of your x coordinate in a datapoint</li> + <li><strong>yField</strong> (string) *optional* default = "y"<br />The property name of your y coordinate in a datapoint</li> + <li><strong>valueField</strong> (string) *optional* default = "value"<br />The property name of your y coordinate in a datapoint</li> + </ul> + <h4>Example configurations</h4> + Simple configuration with standard gradient + <pre><code class="language-javascript">// create configuration object +var config = { + container: document.getElementById('heatmapContainer'), + radius: 10, + maxOpacity: .5, + minOpacity: 0, + blur: .75 +}; +// create heatmap with configuration +var heatmapInstance = h337.create(config);</code></pre> +Custom gradient configuration + <pre><code class="language-javascript">// create configuration object +var config = { + container: document.getElementById('heatmapContainer'), + radius: 10, + maxOpacity: .5, + minOpacity: 0, + blur: .75, + gradient: { + // enter n keys between 0 and 1 here + // for gradient color customization + '.5': 'blue', + '.8': 'red', + '.95': 'white' + } +}; +var heatmapInstance = h337.create(config);</code></pre> + + </div> + </div> + <!-- <div class="fn"> + <h3 id="h337-register">h337.register(pluginKey, plugin)</h3> + <div class="description"> + to be written + </div> + </div> --> + </div> + </section> + <section> + <h2>heatmapInstance</h2> + <div class="description"> + Heatmap instances are returned by h337.create. A heatmap instance has its own internal datastore and renderer where you can manipulate data. As a result the heatmap gets updated (either partially or completely, depending on whether it's necessary). + </div> + <div class="functions"> + <div class="fn"> + <h3 id="heatmap-addData">heatmapInstance.addData(object|array)</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Use this functionality only for adding datapoints on the fly, not for data initialization! heatmapInstance.addData adds a single or multiple datapoints to the heatmaps' datastore. + <pre><code class="language-javascript">// a single datapoint +var dataPoint = { + x: 5, // x coordinate of the datapoint, a number + y: 5, // y coordinate of the datapoint, a number + value: 100 // the value at datapoint(x, y) +}; +heatmapInstance.addData(dataPoint); + +// multiple datapoints (for data initialization use setData!!) +var dataPoints = [dataPoint, dataPoint, dataPoint, dataPoint]; +heatmapInstance.addData(dataPoints);</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-setData">heatmapInstance.setData(object)</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Initializes a heatmap instance with a dataset. <strong>"min"</strong>, <strong>"max"</strong>, and <strong>"data"</strong> properties are required.<br />setData removes all previously existing points from the heatmap instance and re-initializes the datastore. + <pre><code class="language-javascript">var data = { + max: 100, + min: 0, + data: [ + dataPoint, dataPoint, dataPoint, dataPoint + ] +}; +heatmapInstance.setData(data);</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-setDataMax">heatmapInstance.setDataMax(number)</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Changes the upper bound of your dataset and triggers a complete rerendering. + <pre><code class="language-javascript">heatmapInstance.setDataMax(200); +// setting the maximum value triggers a complete rerendering of the heatmap +heatmapInstance.setDataMax(100);</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-setDataMin">heatmapInstance.setDataMin(number)</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Changes the lower bound of your dataset and triggers a complete rerendering. + <pre><code class="language-javascript">heatmapInstance.setDataMin(10); +// setting the minimum value triggers a complete rerendering of the heatmap +heatmapInstance.setDataMin(0);</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-configure">heatmapInstance.configure(configObject)</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Reconfigures a heatmap instance after it has been initialized. Triggers a complete rerendering. + <pre><code class="language-javascript">var nuConfig = { + radius: 10, + maxOpacity: .5, + minOpacity: 0, + blur: .75 +}; +heatmapInstance.configure(nuConfig);</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-getValueAt">heatmapInstance.getValueAt(object)</h3> + <div class="description"> + Returns <strong>value at datapoint position</strong><br /><br /> + Note: The returned value is an interpolated value based on the gradient blending if point is not in store + <pre><code class="language-javascript">heatmapInstance.addData({ x: 10, y: 10, value: 100}); +// get the value at x=10, y=10 +heatmapInstance.getValueAt({ x: 10, y: 10 }); // returns 100</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-getData">heatmapInstance.getData()</h3> + <div class="description"> + Returns <strong>a persistable and reimportable (with setData) JSON object</strong><br /><br /> + <pre><code class="language-javascript">var currentData = heatmapInstance.getData(); +// now let's create a new instance and set the data +var heatmap2 = h337.create(config); +heatmap2.setData(currentData); // now both heatmap instances have the same content</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-getDataURL">heatmapInstance.getDataURL()</h3> + <div class="description"> + Returns <strong>dataURL string</strong><br /><br /> + The returned value is the base64 encoded dataURL of the heatmap instance. + <pre><code class="language-javascript">heatmapInstance.getDataURL(); // data:image/png;base64... +// ready for saving locally or on the server</code></pre> + </div> + </div> + <div class="fn"> + <h3 id="heatmap-repaint">heatmapInstance.repaint()</h3> + <div class="description"> + Returns <strong>heatmapInstance</strong><br /><br /> + Repaints the whole heatmap canvas + </div> + </div> + </div> + </section> + </div> + <script src="assets/js/prism.js"></script> + <script> + var docs = (function() { + + //delete localStorage['readTheDocs']; + + function $(id) { + return document.getElementById(id); + }; + + function initializeDocs () { + var showMessage = false; + + if (!localStorage['readTheDocs']) { + showMessage = true; + } + $('btn-confirm').onclick = function() { + localStorage['readTheDocs'] = true; + $('msg-content').classList.add('animate'); + $('msg-content').classList.add('hide'); + }; + if (!showMessage) { + $('msg-content').classList.add('hide'); + // dirty hack ;-) + setTimeout(function() { $('msg-content').classList.add('animate'); }, 100); + } + + $('activate-msg').onclick = function() { + $('msg-content').classList.remove('hide'); + } + + + // initialize and add feedback buttons + + }; + + + return { + init: initializeDocs + } + }()); + window.onload = function() { + docs.init(); + }; + </script> + </body> +</html> diff --git a/static/js/libs/heatmap.js-2.0.5/examples/angular-heatmap/index.html b/static/js/libs/heatmap.js-2.0.5/examples/angular-heatmap/index.html new file mode 100644 index 00000000..4e18df81 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/angular-heatmap/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Angular Heatmap Directive Example | heatmap.js</title> + <style> + body, html { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; } + #heatmapContainer { width:100%; height:100%;} + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + heatmap { width:100%; height:100%; position:absolute;} + </style> + </head> + <body ng-app="heatmapApp"> + <div ng-controller="HeatmapCtrl"> + <heatmap id="heatmap-1" data="heatmapData" config="heatmapConfig" ng-click="updateData()"></heatmap> + </div> + <h1>Angular Heatmap Directive Example</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script> + <script src="/build/heatmap.js"></script> + <script src="/plugins/angular-heatmap/angular-heatmap.js"></script> + <script> + angular.module('heatmapApp', ['heatmap']) + .controller('HeatmapCtrl', ['$scope', '$heatma + value: ((Math.random() * max + min) >> 0),p', function($scope, $heatmap) { + function generateRandomData(len) { + var max = 100; + var min = 1; + var maxX = document.body.clientWidth; + var maxY = document.body.clientHeight; + var data = []; + while (len--) { + data.push({ + x: ((Math.random() * maxX) >> 0), + y: ((Math.random() * maxY) >> 0), + radius: ((Math.random() * 50 + min) >> 0) + }); + } + return { + max: max, + min: min, + data: data + } + }; + + $scope.heatmapData = generateRandomData(1000); + $scope.heatmapConfig = { + blur: .9, + opacity:.5 + }; + + $scope.updateData = function() { + $scope.heatmapData = generateRandomData(1000); + }; + }]) + .run(); + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/googlemaps-heatmap/index.html b/static/js/libs/heatmap.js-2.0.5/examples/googlemaps-heatmap/index.html new file mode 100644 index 00000000..43e35589 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/googlemaps-heatmap/index.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> + <title>Googlemaps Heatmap Layer</title> + <style> + html { height: 100% } + body { height: 100%; margin: 0; padding: 0; font-family:sans-serif; } + #map-canvas { height: 100% } + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200; z-index:10000;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; bottom:20px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + </style> + <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> + <script src="/build/heatmap.js"></script> + <script src="/plugins/gmaps-heatmap/gmaps-heatmap.js"></script> + </head> + <body> + <h1>Gmaps Heatmap Overlay Example</h1> + <div id="map-canvas"></div> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + + <script> + // map center + var myLatlng = new google.maps.LatLng(25.6586, -80.3568); + // map options, + var myOptions = { + zoom: 3, + center: myLatlng + }; + // standard map + map = new google.maps.Map(document.getElementById("map-canvas"), myOptions); + // heatmap layer + heatmap = new HeatmapOverlay(map, + { + // radius should be small ONLY if scaleRadius is true (or small radius is intended) + "radius": 2, + "maxOpacity": 1, + // scales the radius based on map zoom + "scaleRadius": true, + // if set to false the heatmap uses the global maximum for colorization + // if activated: uses the data maximum within the current map boundaries + // (there will always be a red spot with useLocalExtremas true) + "useLocalExtrema": true, + // which field name in your data represents the latitude - default "lat" + latField: 'lat', + // which field name in your data represents the longitude - default "lng" + lngField: 'lng', + // which field name in your data represents the data value - default "value" + valueField: 'count' + } + ); + + var testData = { + max: 8, + data: [{lat: 24.6408, lng:46.7728, count: 3},{lat: 50.75, lng:-1.55, count: 1},{lat: 52.6333, lng:1.75, count: 1},{lat: 48.15, lng:9.4667, count: 1},{lat: 52.35, lng:4.9167, count: 2},{lat: 60.8, lng:11.1, count: 1},{lat: 43.561, lng:-116.214, count: 1},{lat: 47.5036, lng:-94.685, count: 1},{lat: 42.1818, lng:-71.1962, count: 1},{lat: 42.0477, lng:-74.1227, count: 1},{lat: 40.0326, lng:-75.719, count: 1},{lat: 40.7128, lng:-73.2962, count: 2},{lat: 27.9003, lng:-82.3024, count: 1},{lat: 38.2085, lng:-85.6918, count: 1},{lat: 46.8159, lng:-100.706, count: 1},{lat: 30.5449, lng:-90.8083, count: 1},{lat: 44.735, lng:-89.61, count: 1},{lat: 41.4201, lng:-75.6485, count: 2},{lat: 39.4209, lng:-74.4977, count: 1},{lat: 39.7437, lng:-104.979, count: 1},{lat: 39.5593, lng:-105.006, count: 1},{lat: 45.2673, lng:-93.0196, count: 1},{lat: 41.1215, lng:-89.4635, count: 1},{lat: 43.4314, lng:-83.9784, count: 1},{lat: 43.7279, lng:-86.284, count: 1},{lat: 40.7168, lng:-73.9861, count: 1},{lat: 47.7294, lng:-116.757, count: 1},{lat: 47.7294, lng:-116.757, count: 2},{lat: 35.5498, lng:-118.917, count: 1},{lat: 34.1568, lng:-118.523, count: 1},{lat: 39.501, lng:-87.3919, count: 3},{lat: 33.5586, lng:-112.095, count: 1},{lat: 38.757, lng:-77.1487, count: 1},{lat: 33.223, lng:-117.107, count: 1},{lat: 30.2316, lng:-85.502, count: 1},{lat: 39.1703, lng:-75.5456, count: 8},{lat: 30.0041, lng:-95.2984, count: 2},{lat: 29.7755, lng:-95.4152, count: 1},{lat: 41.8014, lng:-87.6005, count: 1},{lat: 37.8754, lng:-121.687, count: 7},{lat: 38.4493, lng:-122.709, count: 1},{lat: 40.5494, lng:-89.6252, count: 1},{lat: 42.6105, lng:-71.2306, count: 1},{lat: 40.0973, lng:-85.671, count: 1},{lat: 40.3987, lng:-86.8642, count: 1},{lat: 40.4224, lng:-86.8031, count: 4},{lat: 47.2166, lng:-122.451, count: 1},{lat: 32.2369, lng:-110.956, count: 1},{lat: 41.3969, lng:-87.3274, count: 2},{lat: 41.7364, lng:-89.7043, count: 2},{lat: 42.3425, lng:-71.0677, count: 1},{lat: 33.8042, lng:-83.8893, count: 1},{lat: 36.6859, lng:-121.629, count: 2},{lat: 41.0957, lng:-80.5052, count: 1},{lat: 46.8841, lng:-123.995, count: 1},{lat: 40.2851, lng:-75.9523, count: 2},{lat: 42.4235, lng:-85.3992, count: 1},{lat: 39.7437, lng:-104.979, count: 2},{lat: 25.6586, lng:-80.3568, count: 7},{lat: 33.0975, lng:-80.1753, count: 1},{lat: 25.7615, lng:-80.2939, count: 1},{lat: 26.3739, lng:-80.1468, count: 1},{lat: 37.6454, lng:-84.8171, count: 1},{lat: 34.2321, lng:-77.8835, count: 1},{lat: 34.6774, lng:-82.928, count: 1},{lat: 39.9744, lng:-86.0779, count: 1},{lat: 35.6784, lng:-97.4944, count: 2},{lat: 33.5547, lng:-84.1872, count: 1},{lat: 27.2498, lng:-80.3797, count: 1},{lat: 41.4789, lng:-81.6473, count: 1},{lat: 41.813, lng:-87.7134, count: 1},{lat: 41.8917, lng:-87.9359, count: 1},{lat: 35.0911, lng:-89.651, count: 1},{lat: 32.6102, lng:-117.03, count: 1},{lat: 41.758, lng:-72.7444, count: 1},{lat: 39.8062, lng:-86.1407, count: 1},{lat: 41.872, lng:-88.1662, count: 1},{lat: 34.1404, lng:-81.3369, count: 1},{lat: 46.15, lng:-60.1667, count: 1},{lat: 36.0679, lng:-86.7194, count: 1},{lat: 43.45, lng:-80.5, count: 1},{lat: 44.3833, lng:-79.7, count: 1},{lat: 45.4167, lng:-75.7, count: 2},{lat: 43.75, lng:-79.2, count: 2},{lat: 45.2667, lng:-66.0667, count: 3},{lat: 42.9833, lng:-81.25, count: 2},{lat: 44.25, lng:-79.4667, count: 3},{lat: 45.2667, lng:-66.0667, count: 2},{lat: 34.3667, lng:-118.478, count: 3},{lat: 42.734, lng:-87.8211, count: 1},{lat: 39.9738, lng:-86.1765, count: 1},{lat: 33.7438, lng:-117.866, count: 1},{lat: 37.5741, lng:-122.321, count: 1},{lat: 42.2843, lng:-85.2293, count: 1},{lat: 34.6574, lng:-92.5295, count: 1},{lat: 41.4881, lng:-87.4424, count: 1},{lat: 25.72, lng:-80.2707, count: 1},{lat: 34.5873, lng:-118.245, count: 1},{lat: 35.8278, lng:-78.6421, count: 1}] + }; + + heatmap.setData(testData); + +</script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/heatmap-legend/index.html b/static/js/libs/heatmap.js-2.0.5/examples/heatmap-legend/index.html new file mode 100644 index 00000000..2b708828 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/heatmap-legend/index.html @@ -0,0 +1,125 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Legend Example (DOM Legends) | heatmap.js</title> + <style> + body, html, h2 { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + body * { font-weight:200;} + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + #heatmapLegend { background:white; position:absolute; bottom:0; right:0; padding:10px; } + #min { float:left; } + #max { float:right; } + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + </style> + </head> + <body> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + <div id="heatmapLegend"> + <h2>Descriptive Legend Title</h2> + <span id="min"></span> + <span id="max"></span> + <img id="gradient" src="" style="width:100%" /> + </div> + </div> + <h1>Adding a custom legend to heatmap.js</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="/build/heatmap.js"></script> + <script> + window.onload = function() { + // helper function + function $(id) { + return document.getElementById(id); + }; + + /* legend code */ + // we want to display the gradient, so we have to draw it + var legendCanvas = document.createElement('canvas'); + legendCanvas.width = 100; + legendCanvas.height = 10; + + var legendCtx = legendCanvas.getContext('2d'); + var gradientCfg = {}; + + function updateLegend(data) { + // the onExtremaChange callback gives us min, max, and the gradientConfig + // so we can update the legend + $('min').innerHTML = data.min; + $('max').innerHTML = data.max; + // regenerate gradient image + if (data.gradient != gradientCfg) { + gradientCfg = data.gradient; + var gradient = legendCtx.createLinearGradient(0, 0, 100, 1); + for (var key in gradientCfg) { + gradient.addColorStop(key, gradientCfg[key]); + } + + legendCtx.fillStyle = gradient; + legendCtx.fillRect(0, 0, 100, 10); + $('gradient').src = legendCanvas.toDataURL(); + } + }; + /* legend code end */ + + + // create a heatmap instance + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + maxOpacity: .5, + radius: 10, + blur: .75, + // update the legend whenever there's an extrema change + onExtremaChange: function onExtremaChange(data) { + updateLegend(data); + } + }); + + // boundaries for data generation + var width = (+window.getComputedStyle(document.body).width.replace(/px/,'')); + var height = (+window.getComputedStyle(document.body).height.replace(/px/,'')); + + // generate 1000 datapoints + var generate = function() { + // randomly generate extremas + var extremas = [(Math.random() * 1000) >> 0,(Math.random() * 1000) >> 0]; + var max = Math.max.apply(Math, extremas); + var min = Math.min.apply(Math,extremas); + var t = []; + + + for (var i = 0; i < 1000; i++) { + var x = (Math.random()* width) >> 0; + var y = (Math.random()* height) >> 0; + var c = ((Math.random()* max-min) >> 0) + min; + // btw, we can set a radius on a point basis + var r = (Math.random()* 80) >> 0; + // add to dataset + t.push({ x: x, y:y, value: c, radius: r }); + } + var init = +new Date; + // set the generated dataset + heatmap.setData({ + min: min, + max: max, + data: t + }); + console.log('took ', (+new Date) - init, 'ms'); + }; + // initial generate + generate(); + + // whenever a user clicks on the ContainerWrapper the data will be regenerated -> new max & min + document.getElementById('heatmapContainerWrapper').onclick = function() { generate(); }; + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/leaflet-heatmap/index.html b/static/js/libs/heatmap.js-2.0.5/examples/leaflet-heatmap/index.html new file mode 100644 index 00000000..782d70fe --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/leaflet-heatmap/index.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Leaflet Heatmap Layer Plugin</title> + <style> + body, html { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + body * { font-weight:200;} + h1 { position:absolute; background:white; padding:10px;} + #map { height:100%; } + .leaflet-container { + background: rgba(0,0,0,.8) !important; + } + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200; z-index:10000;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + </style> + <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" /> + <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script> + <script src="/build/heatmap.js"></script> + <script src="/plugins/leaflet-heatmap/leaflet-heatmap.js"></script> + </head> + <body> + <h1>Leaflet Heatmap Layer Example</h1> + + <div id="map"></div> + + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script> + window.onload = function() { + + var testData = { + max: 8, + data: [{lat: 24.6408, lng:46.7728, count: 3},{lat: 50.75, lng:-1.55, count: 1},{lat: 52.6333, lng:1.75, count: 1},{lat: 48.15, lng:9.4667, count: 1},{lat: 52.35, lng:4.9167, count: 2},{lat: 60.8, lng:11.1, count: 1},{lat: 43.561, lng:-116.214, count: 1},{lat: 47.5036, lng:-94.685, count: 1},{lat: 42.1818, lng:-71.1962, count: 1},{lat: 42.0477, lng:-74.1227, count: 1},{lat: 40.0326, lng:-75.719, count: 1},{lat: 40.7128, lng:-73.2962, count: 2},{lat: 27.9003, lng:-82.3024, count: 1},{lat: 38.2085, lng:-85.6918, count: 1},{lat: 46.8159, lng:-100.706, count: 1},{lat: 30.5449, lng:-90.8083, count: 1},{lat: 44.735, lng:-89.61, count: 1},{lat: 41.4201, lng:-75.6485, count: 2},{lat: 39.4209, lng:-74.4977, count: 1},{lat: 39.7437, lng:-104.979, count: 1},{lat: 39.5593, lng:-105.006, count: 1},{lat: 45.2673, lng:-93.0196, count: 1},{lat: 41.1215, lng:-89.4635, count: 1},{lat: 43.4314, lng:-83.9784, count: 1},{lat: 43.7279, lng:-86.284, count: 1},{lat: 40.7168, lng:-73.9861, count: 1},{lat: 47.7294, lng:-116.757, count: 1},{lat: 47.7294, lng:-116.757, count: 2},{lat: 35.5498, lng:-118.917, count: 1},{lat: 34.1568, lng:-118.523, count: 1},{lat: 39.501, lng:-87.3919, count: 3},{lat: 33.5586, lng:-112.095, count: 1},{lat: 38.757, lng:-77.1487, count: 1},{lat: 33.223, lng:-117.107, count: 1},{lat: 30.2316, lng:-85.502, count: 1},{lat: 39.1703, lng:-75.5456, count: 8},{lat: 30.0041, lng:-95.2984, count: 2},{lat: 29.7755, lng:-95.4152, count: 1},{lat: 41.8014, lng:-87.6005, count: 1},{lat: 37.8754, lng:-121.687, count: 7},{lat: 38.4493, lng:-122.709, count: 1},{lat: 40.5494, lng:-89.6252, count: 1},{lat: 42.6105, lng:-71.2306, count: 1},{lat: 40.0973, lng:-85.671, count: 1},{lat: 40.3987, lng:-86.8642, count: 1},{lat: 40.4224, lng:-86.8031, count: 4},{lat: 47.2166, lng:-122.451, count: 1},{lat: 32.2369, lng:-110.956, count: 1},{lat: 41.3969, lng:-87.3274, count: 2},{lat: 41.7364, lng:-89.7043, count: 2},{lat: 42.3425, lng:-71.0677, count: 1},{lat: 33.8042, lng:-83.8893, count: 1},{lat: 36.6859, lng:-121.629, count: 2},{lat: 41.0957, lng:-80.5052, count: 1},{lat: 46.8841, lng:-123.995, count: 1},{lat: 40.2851, lng:-75.9523, count: 2},{lat: 42.4235, lng:-85.3992, count: 1},{lat: 39.7437, lng:-104.979, count: 2},{lat: 25.6586, lng:-80.3568, count: 7},{lat: 33.0975, lng:-80.1753, count: 1},{lat: 25.7615, lng:-80.2939, count: 1},{lat: 26.3739, lng:-80.1468, count: 1},{lat: 37.6454, lng:-84.8171, count: 1},{lat: 34.2321, lng:-77.8835, count: 1},{lat: 34.6774, lng:-82.928, count: 1},{lat: 39.9744, lng:-86.0779, count: 1},{lat: 35.6784, lng:-97.4944, count: 2},{lat: 33.5547, lng:-84.1872, count: 1},{lat: 27.2498, lng:-80.3797, count: 1},{lat: 41.4789, lng:-81.6473, count: 1},{lat: 41.813, lng:-87.7134, count: 1},{lat: 41.8917, lng:-87.9359, count: 1},{lat: 35.0911, lng:-89.651, count: 1},{lat: 32.6102, lng:-117.03, count: 1},{lat: 41.758, lng:-72.7444, count: 1},{lat: 39.8062, lng:-86.1407, count: 1},{lat: 41.872, lng:-88.1662, count: 1},{lat: 34.1404, lng:-81.3369, count: 1},{lat: 46.15, lng:-60.1667, count: 1},{lat: 36.0679, lng:-86.7194, count: 1},{lat: 43.45, lng:-80.5, count: 1},{lat: 44.3833, lng:-79.7, count: 1},{lat: 45.4167, lng:-75.7, count: 2},{lat: 43.75, lng:-79.2, count: 2},{lat: 45.2667, lng:-66.0667, count: 3},{lat: 42.9833, lng:-81.25, count: 2},{lat: 44.25, lng:-79.4667, count: 3},{lat: 45.2667, lng:-66.0667, count: 2},{lat: 34.3667, lng:-118.478, count: 3},{lat: 42.734, lng:-87.8211, count: 1},{lat: 39.9738, lng:-86.1765, count: 1},{lat: 33.7438, lng:-117.866, count: 1},{lat: 37.5741, lng:-122.321, count: 1},{lat: 42.2843, lng:-85.2293, count: 1},{lat: 34.6574, lng:-92.5295, count: 1},{lat: 41.4881, lng:-87.4424, count: 1},{lat: 25.72, lng:-80.2707, count: 1},{lat: 34.5873, lng:-118.245, count: 1},{lat: 35.8278, lng:-78.6421, count: 1}] + }; + + var baseLayer = L.tileLayer( + 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{ + attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>', + maxZoom: 18 + } + ); + + var cfg = { + // radius should be small ONLY if scaleRadius is true (or small radius is intended) + "radius": 2, + "maxOpacity": .8, + // scales the radius based on map zoom + "scaleRadius": true, + // if set to false the heatmap uses the global maximum for colorization + // if activated: uses the data maximum within the current map boundaries + // (there will always be a red spot with useLocalExtremas true) + "useLocalExtrema": true, + // which field name in your data represents the latitude - default "lat" + latField: 'lat', + // which field name in your data represents the longitude - default "lng" + lngField: 'lng', + // which field name in your data represents the data value - default "value" + valueField: 'count' + }; + + + var heatmapLayer = new HeatmapOverlay(cfg); + + var map = new L.Map('map', { + center: new L.LatLng(25.6586, -80.3568), + zoom: 4, + layers: [baseLayer, heatmapLayer] + }); + + heatmapLayer.setData(testData); + + // make accessible for debugging + layer = heatmapLayer; + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/mousemove-heatmap/index.html b/static/js/libs/heatmap.js-2.0.5/examples/mousemove-heatmap/index.html new file mode 100644 index 00000000..e4727131 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/mousemove-heatmap/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Mousemove example (with backgroundColor) | heatmap.js</title> + <style> + body, html { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + body * { font-weight:200;} + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; } + #heatmapContainer { width:100%; height:100%;} + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200; z-index:10000;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + </style> + </head> + <body> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + + </div> + <h1>heatmap.js Mousemove Example</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="/build/heatmap.js"></script> + <script> + window.onload = function() { + // create a heatmap instance + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + maxOpacity: .6, + radius: 50, + blur: .90, + // backgroundColor with alpha so you can see through it + backgroundColor: 'rgba(0, 0, 58, 0.96)' + }); + var heatmapContainer = document.getElementById('heatmapContainerWrapper'); + + heatmapContainer.onmousemove = heatmapContainer.ontouchmove = function(e) { + // we need preventDefault for the touchmove + e.preventDefault(); + var x = e.layerX; + var y = e.layerY; + if (e.touches) { + x = e.touches[0].pageX; + y = e.touches[0].pageY; + } + + heatmap.addData({ x: x, y: y, value: 1 }); + + }; + + heatmapContainer.onclick = function(e) { + var x = e.layerX; + var y = e.layerY; + heatmap.addData({ x: x, y: y, value: 1 }); + }; + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/raindrops/index.html b/static/js/libs/heatmap.js-2.0.5/examples/raindrops/index.html new file mode 100644 index 00000000..09784a79 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/raindrops/index.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Raindrops example (custom gradient) | heatmap.js</title> + <style> + body, html { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; } + #heatmapContainer { width:100%; height:100%;} + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + + </style> + </head> + <body> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <h1>Adding datapoints in real time with heatmap.js</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="/build/heatmap.js"></script> + <script> + window.onload = function() { + // create heatmap instance + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + // a waterdrop gradient ;-) + gradient: { .1: 'rgba(0,0,0,0)', 0.25: "rgba(0,0,90, .6)", .6: "blue", .9: "cyan", .95: 'rgba(255,255,255,.4)'}, + maxOpacity: .6, + radius: 10, + blur: .90 + }); + + // boundaries for data generation + var width = (+window.getComputedStyle(document.body).width.replace(/px/,'')); + var height = (+window.getComputedStyle(document.body).height.replace(/px/,'')); + + var generate = function() { + var max = 100; + var min = 0; + var t = []; + + var x = (Math.random()* width) >> 0; + var y = (Math.random()* height) >> 0; + var c = 100; + var r = (Math.random()* 100) >> 0; + + // add the datapoint to heatmap instance + heatmap.addData({ x: x, y:y, value: c, radius: r}); + }; + + // this generates new datapoints in a kind of random timing + setTimeout(function test() { + var rand = (Math.random() * 500) >> 0; + generate(); + setTimeout(test, rand); + }, 100); + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/austria.svg b/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/austria.svg new file mode 100644 index 00000000..19acb4cb --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/austria.svg @@ -0,0 +1,1540 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xml:space="preserve" + width="297mm" + height="210mm" + style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" + viewBox="0 0 297 210" + id="svg2"> + <defs + id="defs4"> + <font + id="FontID0" + font-variant="normal" + style="fill-rule:nonzero" + font-style="normal" + font-weight="400"> + <font-face + font-family="Arial" + id="font-face7"> + </font-face> + <missing-glyph + id="missing-glyph9"><path + d="M0 0z" + id="path11" /></missing-glyph> + <glyph + unicode="/" + horiz-adv-x="277" + id="glyph13"><path + d="M0 -12.1687l207.496 740.165 70.3395 0 -207.01 -740.165 -70.8255 0z" + id="path15" /></glyph> + <glyph + unicode="." + horiz-adv-x="277" + id="glyph17"><path + d="M90.8299 0l0 100.164 100.164 0 0 -100.164 -100.164 0z" + id="path19" /></glyph> + <glyph + unicode="-" + horiz-adv-x="333" + id="glyph21"><path + d="M31.667 214.825l0 88.3395 270.161 0 0 -88.3395 -270.161 0z" + id="path23" /></glyph> + <glyph + unicode="," + horiz-adv-x="277" + id="glyph25"><path + d="M88.8254 0l0 100.164 100.184 0 0 -100.164c0,-36.8301 -6.51967,-66.4925 -19.5185,-89.1697 -13.1608,-22.4949 -33.8334,-39.9887 -61.9976,-52.5016l-24.4994 37.6805c18.5061,8.15971 32.1732,20.1664 41.001,35.8177 8.84812,15.8335 13.667,38.5106 14.6794,68.1731l-49.8492 0z" + id="path27" /></glyph> + <glyph + unicode="+" + horiz-adv-x="583" + id="glyph29"><path + d="M250.501 115.674l0 196.319 -194.841 0 0 82.0021 194.841 0 0 194.841 82.9942 0 0 -194.841 194.841 0 0 -82.0021 -194.841 0 0 -196.319 -82.9942 0z" + id="path31" /></glyph> + <glyph + unicode="*" + horiz-adv-x="389" + id="glyph33"><path + d="M31.343 584.503l22.3329 69.3272c51.8334,-18.3239 89.3316,-33.9954 112.819,-47.3385 -6.15522,58.839 -9.49604,99.3339 -9.82,121.505l70.8255 0c-0.992124,-32.1529 -4.65691,-72.506 -11.1766,-120.999 33.5095,16.8459 71.8379,32.4971 115.167,46.8323l22.5151 -69.3272c-41.3452,-13.667 -81.8401,-22.8391 -121.505,-27.334 19.8222,-17.3318 47.8244,-48.0066 83.8243,-92.3283l-58.4948 -41.5072c-18.8301,25.6737 -41.163,60.6613 -66.8367,105.003 -24.1552,-45.8402 -45.334,-80.8277 -63.4959,-105.003l-57.6647 41.5072c37.8424,46.4881 64.8323,77.3249 81.0099,92.3283 -42.0134,8.15971 -81.8401,17.1698 -119.5,27.334z" + id="path35" /></glyph> + <glyph + unicode=")" + horiz-adv-x="333" + id="glyph37"><path + d="M123.509 -210.492l-63.01 0c97.3294,156.33 146.004,312.661 146.004,469.335 0,61.1472 -7.00561,121.829 -20.9966,182.166 -11.0146,48.6546 -26.5039,95.6488 -46.3464,140.497 -12.6546,29.3183 -38.8346,78.1551 -78.6612,146.49l63.01 0c61.1675,-81.6579 106.481,-163.66 135.82,-246.006 25.0056,-70.9875 37.4982,-145.154 37.4982,-222.661 0,-87.9953 -16.8256,-172.832 -50.4971,-254.996 -33.6715,-82.0021 -74.6725,-153.658 -122.821,-214.825z" + id="path39" /></glyph> + <glyph + unicode="(" + horiz-adv-x="333" + id="glyph41"><path + d="M233.837 -210.492c-48.5128,61.1675 -89.5139,132.823 -123.003,214.825 -33.5095,82.164 -50.3351,167.001 -50.3351,254.996 0,77.5071 12.4927,151.673 37.6602,222.661 29.3385,82.3463 74.5105,164.348 135.678,246.006l62.9897 0c-39.3205,-67.6669 -65.3182,-115.997 -77.9931,-144.992 -20.0045,-44.8278 -35.4937,-91.8423 -46.9943,-140.679 -14.0112,-60.8233 -20.9966,-121.991 -20.9966,-183.482 0,-156.675 48.6546,-313.005 145.984,-469.335l-62.9897 0z" + id="path43" /></glyph> + <glyph + unicode="'" + horiz-adv-x="190" + id="glyph45"><path + d="M66.3306 462.33l-22.3329 133.835 0 119.662 100.002 0 0 -119.662 -23.325 -133.835 -54.3441 0z" + id="path47" /></glyph> + <glyph + unicode="&" + horiz-adv-x="666" + id="glyph49"><path + d="M475.167 84.4925c-28.9943,-32.3351 -60.6613,-56.4903 -94.8389,-72.4858 -34.1574,-16.1777 -71.1697,-24.1754 -110.834,-24.1754 -73.1539,0 -131.325,24.6614 -174.33,74.1663 -34.8256,40.3329 -52.1574,85.5049 -52.1574,135.334 0,44.1596 14.1529,84.1685 42.6613,119.844 28.5084,35.6557 71.0077,66.9987 127.66,93.9885 -32.1529,37.0123 -53.6557,67.1607 -64.3261,90.344 -10.8324,23.0011 -16.1574,45.334 -16.1574,66.8165 0,43.0055 16.8256,80.3418 50.4971,112.171 33.6512,31.667 76.1506,47.5005 127.154,47.5005 48.8368,0 88.8457,-15.0033 120.006,-44.8278 30.9988,-30.0067 46.5083,-66.0066 46.5083,-108 0,-68.0111 -45.01,-126.162 -135.172,-174.33l128.328 -163.498c14.6591,28.6501 26.1597,61.8356 34.1777,99.4958l91.3159 -19.4983c-15.6513,-62.5038 -36.6681,-113.831 -63.4959,-154.164 33.0033,-43.6737 70.1776,-80.3418 111.847,-110.004l-59.001 -69.8334c-35.514,22.8391 -72.1821,56.4903 -109.842,101.156zm-178.825 372.998c38.1664,22.5151 62.8278,42.1754 73.9841,59.1832 11.3386,16.8256 16.8459,35.4937 16.8459,56.1664 0,24.3172 -7.67377,44.3216 -23.1631,59.6692 -15.5095,15.4893 -34.6838,23.325 -57.8469,23.325 -23.8312,0 -43.4915,-7.67377 -59.325,-23.0011 -15.8335,-15.3273 -23.6692,-33.9954 -23.6692,-56.1664 0,-10.9944 2.83464,-22.6569 8.50392,-35.0078 5.66928,-12.1687 14.3352,-24.9853 25.6535,-38.6523l39.0168 -45.5162zm123.651 -303.651l-161.149 199.66c-47.5005,-28.3261 -79.6736,-54.668 -96.1753,-78.8232 -16.6636,-24.3374 -25.0056,-48.3508 -25.0056,-71.9998 0,-29.0146 11.6625,-59.1832 34.6636,-90.344 23.1833,-31.3228 55.8424,-46.8323 98.1798,-46.8323 26.3217,0 53.6557,8.15971 81.8198,24.6614 28.1844,16.3397 50.6793,37.6805 67.6669,63.6781z" + id="path51" /></glyph> + <glyph + unicode="%" + horiz-adv-x="889" + id="glyph53"><path + d="M58.1708 544.008c0,50.983 12.8369,94.4947 38.4904,130.333 25.6737,35.8177 63.01,53.6557 111.847,53.6557 44.9898,0 82.164,-15.9955 111.482,-47.9864 29.5005,-32.1732 44.3419,-79.3497 44.3419,-141.509 0,-60.4993 -15.0033,-107.17 -44.8278,-139.829 -29.6625,-32.6793 -66.3306,-48.9988 -110.004,-48.9988 -43.3295,0 -79.3294,15.9955 -108.162,48.3306 -28.8323,32.1732 -43.1675,80.8277 -43.1675,146.004zm152.828 123.489c-21.8267,0 -39.9887,-9.49604 -54.5061,-28.3261 -14.4972,-18.8301 -21.6647,-53.5139 -21.6647,-104.011 0,-45.8199 7.32957,-78.1551 21.847,-96.9852 14.6591,-18.6681 32.8211,-28.0022 54.3238,-28.0022 22.0089,0 40.3329,9.49604 54.83,28.3261 14.4972,18.8301 21.847,53.3317 21.847,103.505 0,46.1641 -7.34981,78.6612 -22.0089,97.3294 -14.6591,18.8301 -33.0033,28.1642 -54.668,28.1642zm0.506186 -693.839l391.504 754.338 71.3317 0 -390.168 -754.338 -72.668 0zm309.502 194.335c0,51.3475 12.8166,95.0009 38.4904,130.677 25.8357,35.4937 63.172,53.3317 112.333,53.3317 45.01,0 82.164,-15.9955 111.665,-48.0066 29.3385,-32.1529 44.1799,-79.1674 44.1799,-141.327 0,-60.6613 -15.0033,-107.17 -44.6658,-140.011 -29.8447,-32.6591 -66.6748,-48.9988 -110.672,-48.9988 -43.3295,0 -79.3294,16.1777 -108.162,48.5128 -28.8323,32.4971 -43.1675,80.9897 -43.1675,145.822zm153.334 123.509c-22.1709,0 -40.5151,-9.49604 -55.0122,-28.3261 -14.4972,-18.8504 -21.6647,-53.5139 -21.6647,-104.011 0,-45.496 7.32957,-77.8311 22.0089,-96.6612 14.6591,-18.8301 32.6591,-28.3464 54.1619,-28.3464 22.4949,0 41.001,9.51629 55.3362,28.3464 14.4972,18.8301 21.8267,53.3317 21.8267,103.505 0,46.1641 -7.32957,78.6612 -21.9887,97.4913 -14.6794,18.6681 -32.8413,28.0022 -54.668,28.0022z" + id="path55" /></glyph> + <glyph + unicode="$" + horiz-adv-x="556" + id="glyph57"><path + d="M249.003 -102.999l0 87.8333c-43.9977,5.5073 -79.6736,15.3273 -107.17,29.5005 -27.496,14.1732 -51.3272,37.1743 -71.3317,68.659 -20.0045,31.667 -31.667,70.1776 -34.8256,115.674l88.3193 16.6636c6.84363,-47.1562 18.8301,-81.8401 36.1619,-103.991 24.6816,-31.343 54.3441,-48.6748 88.8457,-52.1776l0 279.678c-36.1619,6.82338 -73.0122,20.8346 -110.834,41.9932 -28.0022,15.6715 -49.505,37.3362 -64.6703,64.9942 -15.1653,27.6782 -22.6569,59.001 -22.6569,94.1708 0,62.5038 22.1507,113.163 66.3306,151.835 29.6625,26.1597 73.6601,41.9932 131.831,47.8244l0 42.0134 51.8334 0 0 -42.0134c51.0033,-4.81889 91.6601,-19.8222 121.505,-44.8278 38.4904,-31.8289 61.4914,-75.6646 69.3272,-131.325l-90.8299 -13.667c-5.16309,34.5016 -15.9955,60.9852 -32.4971,79.3294 -16.3397,18.3239 -38.8346,30.4926 -67.5049,36.3239l0 -253.336c44.1596,-11.1563 73.4981,-19.8222 87.8333,-25.9977 27.334,-11.9865 49.6669,-26.6659 66.8367,-43.8154 17.3318,-17.352 30.6546,-37.8424 39.8267,-61.5117 9.33406,-23.8312 13.991,-49.505 13.991,-77.1629 0,-61.0055 -19.4983,-111.665 -58.1506,-152.342 -38.6726,-40.8188 -88.8457,-62.5038 -150.337,-65.5004l0 -88.8254 -51.8334 0zm0 769.503c-34.1777,-5.16309 -61.1675,-18.8301 -80.8277,-41.001 -19.6805,-22.1709 -29.5005,-48.3306 -29.5005,-78.6612 0,-29.8447 8.32169,-55.0122 25.1675,-75.1787 16.8256,-20.1664 45.1518,-36.3239 85.1607,-48.3306l0 243.172zm51.8334 -607.342c34.1574,4.17097 62.3216,19.0123 84.6545,44.3419 22.3329,25.3295 33.5095,56.8345 33.5095,94.3327 0,31.8289 -7.99773,57.5027 -23.6692,76.839 -15.8335,19.316 -47.3385,36.6478 -94.4947,51.9954l0 -267.509z" + id="path59" /></glyph> + <glyph + unicode="#" + horiz-adv-x="556" + id="glyph61"><path + d="M50.3351 -12.1687l42.4993 208.002 -82.5083 0 0 72.668 97.1674 0 35.9999 177.327 -133.167 0 0 72.668 147.847 0 42.4993 209.5 73.3362 0 -42.4993 -209.5 153.82 0 42.3374 209.5 73.8424 0 -42.4993 -209.5 84.4925 0 0 -72.668 -99.1719 0 -36.6681 -177.327 135.84 0 0 -72.668 -150.499 0 -42.3374 -208.002 -73.3362 0 42.0134 208.002 -153.334 0 -42.4993 -208.002 -73.1742 0zm130.333 280.67l153.334 0 36.6681 177.327 -153.84 0 -36.1619 -177.327z" + id="path63" /></glyph> + <glyph + unicode=""" + horiz-adv-x="354" + id="glyph65"><path + d="M70.3395 462.33l-24.4994 136.346 0 117.152 100.164 0 0 -117.152 -22.0089 -136.346 -53.6557 0zm161.655 0l-23.9932 136.346 0 117.152 100.164 0 0 -117.152 -23.5073 -136.346 -52.6635 0z" + id="path67" /></glyph> + <glyph + unicode="!" + horiz-adv-x="277" + id="glyph69"><path + d="M112.839 177.671l-26.8481 379.497 0 158.659 108.85 0 0 -158.659 -25.3498 -379.497 -56.6523 0zm-23.0011 -177.671l0 100.164 101.156 0 0 -100.164 -101.156 0z" + id="path71" /></glyph> + <glyph + unicode=" " + horiz-adv-x="277" + id="glyph73" /> + <glyph + unicode="?" + horiz-adv-x="556" + id="glyph75"><path + d="M230.497 176.335c-0.323959,11.6625 -0.506186,20.4904 -0.506186,26.3419 0,34.4814 4.83913,64.3261 14.6794,89.3316 7.16759,18.8301 18.6681,37.8222 34.6636,57.1585 11.6625,13.991 32.8413,34.3396 63.172,61.1675 30.4926,26.9898 50.1529,48.3306 59.325,64.3261 9.17208,15.8335 13.667,33.3475 13.667,52.1776 0,34.1574 -13.3228,64.1641 -39.9887,90.1618 -26.6659,25.8357 -59.5072,38.8346 -98.1798,38.8346 -37.4982,0 -68.659,-11.8245 -93.6646,-35.1698 -25.1675,-23.5073 -41.5072,-60.1551 -49.3227,-110.004l-90.344 10.8324c8.15971,66.6748 32.3351,117.84 72.506,153.334 40.1709,35.514 93.3204,53.1697 159.327,53.1697 69.9953,0 125.838,-18.9921 167.507,-57.1585 41.6692,-38.0044 62.5038,-84.0066 62.5038,-138.168 0,-31.1608 -7.34981,-59.9931 -22.0089,-86.335 -14.6591,-26.3419 -43.1675,-58.4948 -85.8288,-96.1753 -28.6704,-25.4915 -47.3385,-44.1596 -56.1664,-56.1664 -8.82788,-12.1687 -15.3273,-25.9977 -19.4983,-41.487 -4.33295,-15.6715 -6.68165,-41.001 -7.32957,-76.1708l-84.5127 0zm-5.32507 -176.335l0 100.164 100.002 0 0 -100.164 -100.002 0z" + id="path77" /></glyph> + <glyph + unicode=">" + horiz-adv-x="583" + id="glyph79"><path + d="M528.842 313.005l-474.174 -202.677 0 87.5094 375.509 155.662 -375.509 154.326 0 87.3474 474.174 -200.166 0 -82.0021z" + id="path81" /></glyph> + <glyph + unicode="=" + horiz-adv-x="583" + id="glyph83"><path + d="M528.336 420.843l-472.676 0 0 82.164 472.676 0 0 -82.164zm0 -217.174l-472.676 0 0 82.0021 472.676 0 0 -82.0021z" + id="path85" /></glyph> + <glyph + unicode="<" + horiz-adv-x="583" + id="glyph87"><path + d="M54.668 313.005l0 82.0021 474.174 200.166 0 -87.3474 -376.015 -154.326 376.015 -155.662 0 -87.5094 -474.174 202.677z" + id="path89" /></glyph> + <glyph + unicode=";" + horiz-adv-x="277" + id="glyph91"><path + d="M88.8254 418.494l0 100.002 100.184 0 0 -100.002 -100.184 0zm0 -418.494l0 100.164 100.184 0 0 -100.164c0,-36.8301 -6.51967,-66.4925 -19.5185,-89.1697 -13.1608,-22.4949 -33.8334,-39.9887 -61.9976,-52.5016l-24.4994 37.6805c18.5061,8.15971 32.1732,20.1664 41.001,35.8177 8.84812,15.8335 13.667,38.5106 14.6794,68.1731l-49.8492 0z" + id="path93" /></glyph> + <glyph + unicode=":" + horiz-adv-x="277" + id="glyph95"><path + d="M90.3238 418.494l0 100.002 100.184 0 0 -100.002 -100.184 0zm0 -418.494l0 100.164 100.184 0 0 -100.164 -100.184 0z" + id="path97" /></glyph> + <glyph + unicode="9" + horiz-adv-x="556" + id="glyph99"><path + d="M54.668 165.502l84.4925 7.83575c7.16759,-39.6647 20.8346,-68.497 41.001,-86.497 20.1664,-17.838 46.0021,-26.8481 77.6691,-26.8481 27.0101,0 50.6793,6.17546 71.0077,18.6681 20.3284,12.3307 36.992,28.8323 49.9909,49.505 13.1608,20.6726 24.0134,48.6748 32.8413,83.6624 8.6659,35.1698 13.1608,71.0077 13.1608,107.514 0,3.82676 -0.161979,9.82 -0.506186,17.4938 -17.6558,-27.8402 -41.649,-50.6793 -71.9998,-68.0111 -30.4926,-17.4938 -63.4959,-26.1597 -98.8277,-26.1597 -59.325,0 -109.498,21.5028 -150.499,64.5083 -41.001,42.9853 -61.4914,99.4958 -61.4914,169.835 0,72.6478 21.3205,131.001 64.1641,175.322 42.8233,44.3419 96.4992,66.4925 160.987,66.4925 46.5083,0 89.0077,-12.6546 127.68,-37.6602 38.4904,-25.0056 67.8289,-60.8233 87.8333,-107.17 20.0045,-46.3261 29.9864,-113.487 29.9864,-201.502 0,-91.3159 -9.82,-164.166 -29.6625,-218.49 -20.0045,-54.1619 -49.505,-95.3451 -88.6635,-123.671 -39.3407,-28.3261 -85.1607,-42.4993 -138.006,-42.4993 -55.9841,0 -101.662,15.5095 -137.156,46.6703 -35.4937,30.9988 -56.8345,74.6725 -64.0021,131.001zm359.837 316.002c0,50.3351 -13.3431,90.506 -40.1709,119.986 -27.0101,29.6827 -59.163,44.5038 -97.0054,44.5038 -38.9965,0 -72.992,-15.9955 -101.986,-47.8244 -29.0146,-32.0112 -43.5117,-73.3362 -43.5117,-123.995 0,-45.6782 13.829,-82.6702 41.3452,-111.179 27.496,-28.4881 61.3294,-42.6613 101.662,-42.6613 40.8188,0 74.1663,14.1732 100.326,42.6613 26.3419,28.5084 39.3407,68.0111 39.3407,118.508z" + id="path101" /></glyph> + <glyph + unicode="8" + horiz-adv-x="556" + id="glyph103"><path + d="M176.841 388.163c-36.5061,13.3431 -63.5162,32.3351 -81.1719,57.1787 -17.4938,24.6614 -26.3419,54.3238 -26.3419,88.8254 0,52.1574 18.6681,95.8311 56.1664,131.325 37.4982,35.514 87.1652,53.3317 149.345,53.3317 62.5038,0 112.819,-18.1619 150.985,-54.4858 38.0044,-36.3441 57.0167,-80.5038 57.0167,-132.681 0,-33.1653 -8.6659,-61.9976 -25.9977,-86.659 -17.514,-24.4994 -43.8357,-43.4915 -79.3497,-56.8345 43.8357,-14.3352 77.3452,-37.3362 100.346,-69.3272 22.8188,-31.8289 34.3194,-69.9953 34.3194,-114.175 0,-61.3294 -21.6647,-112.657 -64.8323,-154.326 -43.3295,-41.6692 -100.326,-62.5038 -170.989,-62.5038 -70.6635,0 -127.498,20.8346 -170.828,62.6658 -43.3497,41.8312 -65.0145,94.0088 -65.0145,156.513 0,46.4881 11.8447,85.4846 35.514,116.99 23.487,31.343 57.1585,52.8255 100.832,64.1641zm-17.676 149.001c0,-33.8334 10.9944,-61.4914 32.6591,-82.9942 21.847,-21.5028 50.1731,-32.3351 85.0189,-32.3351 33.8334,0 61.6534,10.6704 83.3181,31.9909 21.6647,21.3408 32.3351,47.5005 32.3351,78.3373 0,32.3351 -10.9944,59.3452 -33.3273,81.3339 -22.3329,22.0089 -50.0111,33.0033 -83.3384,33.0033 -33.4892,0 -61.3294,-10.8324 -83.5004,-32.1732 -22.1709,-21.5028 -33.1653,-47.3182 -33.1653,-77.1629zm-28.3261 -330.661c0,-25.0056 5.99324,-49.343 17.8177,-72.668 11.8447,-23.5073 29.5005,-41.6692 53.0078,-54.5061 23.5073,-12.8369 48.6748,-19.3363 75.6646,-19.3363 42.0134,0 76.677,13.505 104.011,40.6771 27.334,26.9898 41.001,61.3294 41.001,102.999 0,42.3374 -14.0112,77.3249 -42.1754,105.003 -28.1642,27.658 -63.4959,41.487 -105.833,41.487 -41.325,0 -75.5026,-13.667 -102.675,-41.001 -27.1518,-27.496 -40.8188,-61.6534 -40.8188,-102.654z" + id="path105" /></glyph> + <glyph + unicode="7" + horiz-adv-x="556" + id="glyph107"><path + d="M47.3385 622.001l0 84.4925 463.322 0 0 -68.3351c-45.496,-48.4926 -90.668,-113.001 -135.496,-193.322 -44.6658,-80.3418 -79.3294,-163.174 -103.667,-248.011 -17.6558,-59.9931 -28.8323,-125.494 -33.6715,-196.825l-90.3238 0c0.992124,56.3283 12.0067,124.339 33.1653,204.175 21.1586,79.6534 51.4892,156.654 90.9919,230.659 39.6647,74.0043 81.6781,136.508 126.344,187.167l-350.665 0z" + id="path109" /></glyph> + <glyph + unicode="6" + horiz-adv-x="556" + id="glyph111"><path + d="M497.499 540.505l-87.3271 -6.84363c-7.83575,34.5016 -18.8301,59.6692 -33.1653,75.1787 -23.8312,25.1675 -53.1697,37.6602 -88.0156,37.6602 -27.9819,0 -52.5016,-7.83575 -73.6601,-23.5073 -27.658,-20.1664 -49.505,-49.6669 -65.5004,-88.3193 -15.8335,-38.6726 -24.1552,-93.8468 -24.8233,-165.502 21.1586,32.1529 46.9943,56.1664 77.6691,71.8379 30.4926,15.4893 62.6658,23.325 96.155,23.325 58.677,0 108.506,-21.5028 149.669,-64.6703 41.163,-43.1675 61.8356,-98.8277 61.8356,-167.163 0,-45.01 -9.84025,-86.659 -29.1765,-125.332 -19.3363,-38.5106 -46.0021,-68.1731 -79.8356,-88.6635 -33.8334,-20.5106 -72.1618,-30.6748 -115.167,-30.6748 -73.3159,0 -132.985,26.8278 -179.149,80.8277 -46.3464,53.8379 -69.3474,142.684 -69.3474,266.335 0,138.33 25.5118,238.839 76.677,301.666 44.5038,54.668 104.497,82.164 180.162,82.164 56.1664,0 102.33,-15.8335 138.33,-47.5005 35.9999,-31.4847 57.5027,-75.1584 64.6703,-130.819zm-358.825 -308.51c0,-30.3306 6.49942,-59.325 19.316,-87.0032 12.8369,-27.658 30.8368,-48.6546 53.8379,-63.1517 23.1631,-14.4972 47.5005,-21.847 72.83,-21.847 37.1743,0 69.0032,15.0033 95.6691,45.01 26.6659,30.0067 40.0089,70.6635 40.0089,121.991 0,49.505 -13.1608,88.5015 -39.5027,117.01 -26.3419,28.4881 -59.5072,42.6613 -99.4958,42.6613 -39.8469,0 -73.4981,-14.1732 -101.176,-42.6613 -27.658,-28.5084 -41.487,-65.8446 -41.487,-112.009z" + id="path113" /></glyph> + <glyph + unicode="5" + horiz-adv-x="556" + id="glyph115"><path + d="M41.5072 187.491l92.3283 7.83575c6.82338,-44.9898 22.6569,-78.6612 47.5005,-101.318 25.0056,-22.6771 54.992,-34.0157 90.1618,-34.0157 42.3374,0 78.1753,16.0157 107.332,47.8447 29.3385,31.9909 43.9977,74.3283 43.9977,126.992 0,50.1731 -13.991,89.6758 -42.1551,118.67 -28.1642,28.9943 -65.0145,43.4915 -110.672,43.4915 -28.3261,0 -53.8379,-6.49942 -76.6567,-19.316 -22.8391,-12.8369 -40.6771,-29.5005 -53.6759,-50.0111l-82.5083 10.6704 69.3474 367.673 355.99 0 0 -84.0066 -285.671 0 -38.6523 -192.33c42.9853,29.9864 88.1573,44.9898 135.334,44.9898 62.4835,0 115.167,-21.6647 158.153,-64.9942 43.0055,-43.3295 64.5083,-98.9897 64.5083,-167.001 0,-64.8323 -18.9921,-120.837 -56.6725,-167.993 -46.0021,-57.8469 -108.668,-86.8412 -187.997,-86.8412 -65.1562,0 -118.326,18.1619 -159.489,54.668 -41.1833,36.5061 -64.6703,84.8367 -70.5015,144.992z" + id="path117" /></glyph> + <glyph + unicode="4" + horiz-adv-x="556" + id="glyph119"><path + d="M323.169 0l0 171.334 -310.494 0 0 80.6657 326.652 463.828 71.8379 0 0 -463.828 96.6612 0 0 -80.6657 -96.6612 0 0 -171.334 -87.9953 0zm0 251.999l0 322.663 -223.997 -322.663 223.997 0z" + id="path121" /></glyph> + <glyph + unicode="3" + horiz-adv-x="556" + id="glyph123"><path + d="M41.9932 189.01l87.8333 11.6625c10.1642,-49.8289 27.334,-85.6668 51.5094,-107.676 24.3374,-21.9887 53.8379,-33.0033 88.6635,-33.0033 41.325,0 76.3328,14.3352 104.841,43.0055 28.3261,28.6704 42.6613,64.1641 42.6613,106.501 0,40.3329 -13.1608,73.6601 -39.5027,99.84 -26.5039,26.1597 -59.9931,39.3205 -100.67,39.3205 -16.6636,0 -37.3362,-3.32058 -61.9976,-9.82l9.84025 77.1629c5.83126,-0.668165 10.4882,-1.01237 14.1529,-1.01237 37.3362,0 71.0077,9.84025 101.014,29.3385 29.9864,19.4983 44.9898,49.6669 44.9898,90.344 0,32.1529 -10.9944,59.001 -32.8211,79.9976 -21.847,21.1586 -50.0111,31.8289 -84.5127,31.8289 -34.1574,0 -62.6658,-10.8324 -85.3226,-32.1732 -22.8391,-21.5028 -37.4982,-53.8177 -43.9977,-96.8232l-87.8333 15.6715c10.6501,59.001 35.1495,104.659 73.1539,136.994 38.1664,32.3351 85.5049,48.6546 142.177,48.6546 38.9965,0 74.9965,-8.48367 107.818,-25.1473 32.8413,-16.8459 58.0089,-39.685 75.5026,-68.6793 17.3318,-28.9943 26.1799,-59.6692 26.1799,-92.3283 0,-30.8368 -8.34194,-59.001 -25.0056,-84.4925 -16.6636,-25.3498 -41.163,-45.5162 -73.6601,-60.5195 42.3171,-9.65802 75.1584,-29.9864 98.6657,-60.8233 23.325,-30.6748 34.9875,-69.1652 34.9875,-115.329 0,-62.5038 -22.6569,-115.512 -68.3351,-159.003 -45.496,-43.4915 -103.161,-65.1765 -172.832,-65.1765 -62.8278,0 -114.985,18.6681 -156.492,56.1664 -41.5072,37.3362 -65.1765,85.8491 -71.0077,145.518z" + id="path125" /></glyph> + <glyph + unicode="2" + horiz-adv-x="556" + id="glyph127"><path + d="M503.493 84.4925l0 -84.4925 -473.162 0c-0.668165,21.1586 2.67266,41.5072 10.1642,61.0055 12.0067,32.3351 31.343,64.0021 57.8469,95.3249 26.6659,31.1608 64.9942,67.3429 114.985,108.344 77.8311,63.8199 130.515,114.317 157.849,151.653 27.334,37.1743 40.9808,72.506 40.9808,105.671 0,34.8256 -12.4927,64.1641 -37.316,88.1775 -25.0056,23.8312 -57.5027,35.8177 -97.5116,35.8177 -42.3374,0 -76.1708,-12.6546 -101.5,-38.1664 -25.4915,-25.3295 -38.3284,-60.4993 -38.6523,-105.327l-90.344 9.17208c6.17546,67.4847 29.5005,118.832 69.8334,154.164 40.3329,35.3318 94.677,52.9875 162.668,52.9875 68.659,0 123.003,-19.1541 162.992,-57.1585 40.1709,-38.1664 60.1753,-85.3226 60.1753,-141.671 0,-28.6704 -5.83126,-56.8345 -17.676,-84.4925 -11.6625,-27.6782 -31.1608,-56.8345 -58.3328,-87.3271 -27.1518,-30.6748 -72.3238,-72.668 -135.496,-126 -52.6635,-44.3419 -86.497,-74.3485 -101.5,-90.182 -15.0033,-15.6513 -27.334,-31.4847 -37.154,-47.5005l351.151 0z" + id="path129" /></glyph> + <glyph + unicode="1" + horiz-adv-x="556" + id="glyph131"><path + d="M372.492 0l-87.8333 0 0 560.003c-21.1586,-20.1664 -48.8165,-40.3329 -83.1562,-60.4993 -34.5016,-20.1664 -65.3384,-35.3318 -92.6725,-45.334l0 84.8367c49.1607,23.1631 92.1663,51.1652 128.996,83.9863 36.6681,33.0033 62.848,64.8323 78.1753,95.8311l56.4903 0 0 -718.824z" + id="path133" /></glyph> + <glyph + unicode="0" + horiz-adv-x="556" + id="glyph135"><path + d="M41.5072 352.994c0,84.6747 8.6659,152.848 26.1597,204.337 17.3318,51.6714 43.3295,91.4981 77.6691,119.5 34.3396,28.0022 77.5071,41.9932 129.503,41.9932 38.4904,0 72.1618,-7.81551 101.156,-23.325 29.0146,-15.3273 52.8458,-37.6602 71.8379,-66.8367 18.8301,-29.1563 33.6715,-64.6703 44.3419,-106.501 10.8324,-41.8312 16.1574,-98.1595 16.1574,-169.167 0,-83.9863 -8.6659,-151.653 -25.8357,-203.325 -17.3318,-51.6714 -43.1675,-91.4981 -77.4869,-119.662 -34.3396,-28.1642 -77.6691,-42.1754 -130.171,-42.1754 -69.0032,0 -123.165,24.6614 -162.506,74.1663 -47.1562,59.5072 -70.8255,156.675 -70.8255,290.996zm90.3238 0c0,-117.496 13.829,-195.651 41.3452,-234.668 27.496,-38.8346 61.3294,-58.3328 101.662,-58.3328 40.4948,0 74.3283,19.6805 101.824,58.677 27.496,38.9965 41.3452,117.172 41.3452,234.323 0,117.84 -13.8492,196.177 -41.3452,234.85 -27.496,38.8143 -61.6534,58.1506 -102.654,58.1506 -40.5151,0 -72.668,-17.1698 -96.8434,-51.3272 -30.1687,-43.4915 -45.334,-124.157 -45.334,-241.673z" + id="path137" /></glyph> + <glyph + unicode="O" + horiz-adv-x="777" + id="glyph139"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679z" + id="path141" /></glyph> + <glyph + unicode="N" + horiz-adv-x="722" + id="glyph143"><path + d="M76.1708 0l0 715.827 97.1674 0 375.995 -561.987 0 561.987 90.8299 0 0 -715.827 -97.1674 0 -375.995 562.494 0 -562.494 -90.8299 0z" + id="path145" /></glyph> + <glyph + unicode="M" + horiz-adv-x="832" + id="glyph147"><path + d="M74.1663 0l0 715.827 142.663 0 169.329 -506.834c15.6715,-47.1562 27.172,-82.488 34.1777,-105.995 8.15971,25.9977 20.8346,64.3261 38.1664,114.843l171.334 497.985 127.498 0 0 -715.827 -91.3361 0 0 599.162 -208.002 -599.162 -85.5049 0 -206.989 609.326 0 -609.326 -91.3361 0z" + id="path149" /></glyph> + <glyph + unicode="L" + horiz-adv-x="556" + id="glyph151"><path + d="M73.1742 0l0 715.827 94.8187 0 0 -631.335 352.508 0 0 -84.4925 -447.326 0z" + id="path153" /></glyph> + <glyph + unicode="K" + horiz-adv-x="666" + id="glyph155"><path + d="M73.1742 0l0 715.827 94.8187 0 0 -354.998 355.504 354.998 128.328 0 -300.33 -290.004 313.511 -425.824 -125.008 0 -254.834 362.328 -117.172 -114.337 0 -247.99 -94.8187 0z" + id="path157" /></glyph> + <glyph + unicode="J" + horiz-adv-x="500" + id="glyph159"><path + d="M28.8323 203.163l85.5049 11.6625c2.16647,-54.668 12.4927,-92.1663 30.6546,-112.333 18.3442,-20.1664 43.5117,-30.1687 75.6849,-30.1687 23.8312,0 44.3216,5.34532 61.4914,16.3397 17.3318,10.8324 29.1563,25.6737 35.6557,44.3419 6.49942,18.8301 9.84025,48.6546 9.84025,89.6556l0 493.166 94.677 0 0 -487.821c0,-59.8311 -7.16759,-106.339 -21.6647,-139.181 -14.5174,-32.8211 -37.5185,-57.8266 -68.8412,-75.1584 -31.505,-17.1698 -68.3351,-25.8357 -110.672,-25.8357 -62.8278,0 -110.834,18 -144.324,54.1619 -33.3475,36.1821 -49.343,89.8378 -48.0066,161.169z" + id="path161" /></glyph> + <glyph + unicode="I" + horiz-adv-x="277" + id="glyph163"><path + d="M93.3406 0l0 715.827 94.6567 0 0 -715.827 -94.6567 0z" + id="path165" /></glyph> + <glyph + unicode="H" + horiz-adv-x="722" + id="glyph167"><path + d="M79.9976 0l0 715.827 94.8389 0 0 -293.993 372.006 0 0 293.993 94.8187 0 0 -715.827 -94.8187 0 0 337.342 -372.006 0 0 -337.342 -94.8389 0z" + id="path169" /></glyph> + <glyph + unicode="G" + horiz-adv-x="777" + id="glyph171"><path + d="M412.157 280.832l0 83.8446 303.185 0.485938 0 -265.504c-46.5083,-37.154 -94.515,-64.9942 -144,-83.8243 -49.505,-18.6681 -100.346,-28.0022 -152.342,-28.0022 -70.3395,0 -134.342,15.0033 -191.662,45.172 -57.5027,30.0067 -100.832,73.6601 -130.171,130.495 -29.3385,56.9965 -43.9977,120.675 -43.9977,190.994 0,69.6714 14.6591,134.666 43.8357,195.003 28.9943,60.4993 70.9875,105.347 125.656,134.666 54.668,29.1765 117.678,43.8357 189.01,43.8357 51.6714,0 98.5037,-8.32169 140.335,-25.1675 41.8312,-16.6636 74.6523,-39.9887 98.3215,-69.9953 23.8312,-30.0067 41.8312,-69.0032 54.3441,-117.172l-85.5049 -23.487c-10.8324,36.4859 -24.1754,65.1562 -40.0089,85.9908 -15.9955,20.8346 -38.8143,37.4982 -68.497,50.0111 -29.5005,12.4927 -62.4835,18.8301 -98.5037,18.8301 -43.3295,0 -80.8277,-6.68165 -112.333,-19.8425 -31.667,-13.1608 -56.9965,-30.4926 -76.4948,-51.9954 -19.3363,-21.5028 -34.3194,-45.01 -45.172,-70.8255 -18.1619,-44.1799 -27.3138,-92.1865 -27.3138,-144 0,-63.8401 10.9944,-117.172 32.9831,-160.177 22.0089,-43.0055 53.9999,-74.8345 96.0133,-95.6691 41.9932,-20.8346 86.497,-31.3228 133.653,-31.3228 41.1833,0 81.1719,7.99773 120.168,23.8312 39.1788,15.6513 68.6793,32.4971 88.8457,50.4971l0 133.329 -210.35 0z" + id="path173" /></glyph> + <glyph + unicode="F" + horiz-adv-x="610" + id="glyph175"><path + d="M82.0021 0l0 715.827 483.002 0 0 -84.4925 -388.163 0 0 -221.669 335.824 0 0 -84.4925 -335.824 0 0 -325.174 -94.8389 0z" + id="path177" /></glyph> + <glyph + unicode="E" + horiz-adv-x="666" + id="glyph179"><path + d="M79.1674 0l0 715.827 517.504 0 0 -84.4925 -422.847 0 0 -219.178 395.999 0 0 -83.9863 -395.999 0 0 -243.678 439.511 0 0 -84.4925 -534.168 0z" + id="path181" /></glyph> + <glyph + unicode="D" + horiz-adv-x="722" + id="glyph183"><path + d="M77.1629 0l0 715.827 246.512 0c55.6602,0 98.1595,-3.5028 127.498,-10.3262 41.001,-9.33406 75.9886,-26.5039 105.003,-51.1652 37.6602,-32.0112 65.9864,-72.668 84.6545,-122.335 18.8301,-49.6669 28.1642,-106.339 28.1642,-170.159 0,-54.3441 -6.33744,-102.513 -19.1541,-144.506 -12.6749,-41.9932 -28.8323,-76.839 -48.8368,-104.335 -19.8425,-27.496 -41.5072,-49.1607 -65.1765,-64.8323 -23.487,-15.8335 -51.9954,-27.8402 -85.3226,-35.9999 -33.5095,-8.15971 -71.8379,-12.1687 -115.005,-12.1687l-258.337 0zm94.677 84.4925l152.828 0c47.1562,0 84.3305,4.33295 111.158,13.1811 26.8481,8.82788 48.1686,21.1586 64.1843,37.154 22.4949,22.3329 39.9887,52.6635 52.4813,90.506 12.5129,38.0044 18.8504,83.8243 18.8504,138.006 0,74.8345 -12.3509,132.317 -36.8503,172.488 -24.6614,40.3329 -54.4858,67.181 -89.6556,80.848 -25.3295,9.82 -66.3306,14.6591 -122.497,14.6591l-150.499 0 0 -546.842z" + id="path185" /></glyph> + <glyph + unicode="C" + horiz-adv-x="722" + id="glyph187"><path + d="M587.843 251.007l94.8187 -24.0134c-19.8222,-77.6691 -55.6602,-136.994 -107.17,-177.995 -51.6512,-40.8391 -114.661,-61.1675 -189.334,-61.1675 -77.1629,0 -139.829,15.6715 -188.159,46.9943 -48.3306,31.505 -85.1607,77.001 -110.328,136.508 -25.1675,59.6692 -37.8424,123.671 -37.8424,192.006 0,74.4903 14.1732,139.485 42.6613,195.003 28.5084,55.4982 69.0032,97.6533 121.667,126.486 52.5016,28.8323 110.348,43.1675 173.5,43.1675 71.6759,0 131.851,-18.1619 180.668,-54.668 48.8368,-36.4859 82.8322,-87.6713 102.007,-153.82l-93.1584 -22.0089c-16.6636,52.1574 -40.6771,89.9998 -72.344,113.831 -31.505,23.8312 -71.1697,35.676 -119.156,35.676 -55.0122,0 -100.832,-13.1811 -137.844,-39.5027 -36.992,-26.5039 -62.9897,-61.8356 -77.8311,-106.339 -15.0033,-44.3216 -22.4949,-90.1618 -22.4949,-137.338 0,-60.9852 8.82788,-113.993 26.5039,-159.489 17.8177,-45.334 45.334,-79.3294 82.8322,-101.845 37.4982,-22.4949 77.9931,-33.6512 121.667,-33.6512 52.9875,0 97.8356,15.3273 134.666,45.8199 36.8301,30.6748 61.6534,76.1708 74.6725,136.346z" + id="path189" /></glyph> + <glyph + unicode="B" + horiz-adv-x="666" + id="glyph191"><path + d="M73.1742 0l0 715.827 268.663 0c54.668,0 98.5037,-7.32957 131.487,-21.6647 33.1855,-14.4972 59.001,-36.8301 77.6691,-66.9987 18.6681,-30.0067 28.1642,-61.4914 28.1642,-94.4947 0,-30.4926 -8.32169,-59.3452 -24.9853,-86.335 -16.5017,-27.0101 -41.6692,-48.8368 -75.1787,-65.5004 43.3497,-12.6749 76.515,-34.3396 99.84,-64.8323 23.325,-30.6748 35.0078,-66.8367 35.0078,-108.506 0,-33.4892 -7.16759,-64.6703 -21.3408,-93.5026 -14.1732,-28.8323 -31.667,-50.983 -52.5016,-66.6545 -20.8346,-15.6715 -46.9943,-27.334 -78.3373,-35.3318 -31.3228,-7.99773 -69.8334,-12.0067 -115.491,-12.0067l-272.996 0zm94.8187 414.991l154.832 0c41.8514,0 71.9998,2.83464 90.344,8.34194 23.9932,7.16759 42.1551,18.9921 54.3238,35.676 12.1687,16.6636 18.3442,37.4982 18.3442,62.4835 0,23.6692 -5.66928,44.6658 -17.0078,62.6658 -11.5005,18.1822 -27.82,30.5129 -48.8368,37.1743 -21.1586,6.6614 -57.4824,10.0022 -108.992,10.0022l-143.008 0 0 -216.344zm0 -330.499l178.177 0c30.6546,0 52.1574,1.17435 64.488,3.34082 21.847,4.00899 40.0089,10.5084 54.668,19.6602 14.6794,9.0101 26.6659,22.3329 36.1821,39.6647 9.33406,17.514 14.1529,37.5185 14.1529,60.3373 0,26.6659 -6.82338,49.8289 -20.4904,69.6714 -13.667,19.6602 -32.6793,33.5095 -56.9965,41.5072 -24.1754,7.83575 -59.1832,11.8245 -104.679,11.8245l-165.502 0 0 -246.006z" + id="path193" /></glyph> + <glyph + unicode="A" + horiz-adv-x="666" + id="glyph195"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844z" + id="path197" /></glyph> + <glyph + unicode="@" + horiz-adv-x="1015" + id="glyph199"><path + d="M566.827 79.6736c-21.1586,-24.4994 -44.8278,-44.1799 -70.9875,-58.839 -26.1799,-14.8414 -52.5016,-22.3329 -78.8435,-22.3329 -28.9943,0 -57.1585,8.50392 -84.4925,25.4915 -27.334,16.8459 -49.505,42.8435 -66.6748,78.0133 -16.9876,35.1698 -25.6535,73.8221 -25.6535,115.836 0,51.6512 13.3228,103.485 39.8267,155.5 26.5039,51.8334 59.5072,90.8299 98.8277,116.828 39.5027,26.1597 77.6691,39.1585 114.843,39.1585 28.3261,0 55.3362,-7.49155 80.9897,-22.3329 25.8357,-14.6591 47.8447,-37.3362 66.5128,-67.5049l16.4814 75.6849 87.5094 0 -70.3395 -327.684c-9.82,-45.496 -14.6591,-70.8255 -14.6591,-75.6646 0,-8.82788 3.34082,-16.3194 10.0022,-22.6569 6.6614,-6.33744 14.6591,-9.49604 24.1552,-9.49604 17.352,0 39.8469,9.82 67.8491,29.6625 37.154,26.1597 66.4925,61.0055 88.1573,104.821 21.6647,43.6737 32.4971,88.8457 32.4971,135.516 0,54.3238 -13.991,105.165 -41.8312,152.321 -27.8402,47.1765 -69.3272,84.8367 -124.501,113.163 -55.154,28.3464 -115.997,42.4993 -182.834,42.4993 -76.1708,0 -145.66,-17.8177 -208.67,-53.4937 -62.9897,-35.4937 -111.827,-86.659 -146.49,-153.172 -34.6636,-66.6545 -51.9954,-137.986 -51.9954,-214.157 0,-79.8356 17.3318,-148.495 51.9954,-205.997 34.6636,-57.6647 84.8367,-100.346 150.337,-127.842 65.6624,-27.496 138.33,-41.163 218.004,-41.163 85.3226,0 156.816,14.3352 214.319,43.0055 57.6647,28.6704 100.832,63.4959 129.503,104.497l88.3395 0c-16.6636,-34.1574 -45.01,-69.0032 -85.5049,-104.497 -40.3329,-35.4937 -88.3395,-63.6781 -144,-84.3305 -55.6602,-20.6726 -122.659,-30.9988 -201.158,-30.9988 -72.344,0 -138.837,9.33406 -200.004,27.82 -61.0055,18.6681 -113.001,46.5083 -156.006,83.8446 -43.0055,37.154 -75.3204,80.1595 -97.1674,128.652 -27.334,61.5117 -41.001,127.842 -41.001,199.174 0,79.5116 16.3397,155.176 48.8368,226.994 39.6647,88.3395 96.1753,155.844 169.167,202.677 73.1742,46.8323 161.838,70.3395 266.011,70.3395 80.6657,0 153.152,-16.5017 217.498,-49.505 64.1641,-33.1653 114.985,-82.3463 151.997,-147.847 31.667,-56.1664 47.3182,-117.496 47.3182,-183.482 0,-94.515 -33.1653,-178.177 -99.4958,-251.513 -59.325,-65.6624 -123.995,-98.6657 -194.335,-98.6657 -22.4949,0 -40.6568,3.5028 -54.4858,10.3464 -13.8492,6.82338 -24.0134,16.4814 -30.5129,29.3183 -4.15072,7.99773 -7.32957,22.0089 -9.33406,42.0134zm-236.328 132.155c0,-44.5038 10.6704,-79.1674 31.8289,-103.991 21.1788,-24.6614 45.334,-37.0123 72.668,-37.0123 18.3442,0 37.4982,5.5073 57.6647,16.3397 20.1664,10.8324 39.5027,27.172 57.8469,48.4926 18.4859,21.5028 33.4892,48.8368 45.1518,81.8401 11.8447,33.0033 17.676,66.1686 17.676,99.3339 0,44.3419 -10.9944,78.6612 -33.0033,103.161 -21.9887,24.3374 -48.8368,36.5061 -80.3215,36.5061 -20.8346,0 -40.5151,-5.16309 -58.839,-15.8335 -18.3442,-10.4882 -36.1619,-27.496 -53.5139,-51.0033 -17.1496,-23.487 -30.9988,-51.9954 -41.487,-85.5049 -10.3464,-33.4892 -15.6715,-64.3261 -15.6715,-92.3283z" + id="path201" /></glyph> + <glyph + unicode="_" + horiz-adv-x="556" + id="glyph203"><path + d="M-15.1653 -198.668l0 63.3339 582.498 0 0 -63.3339 -582.498 0z" + id="path205" /></glyph> + <glyph + unicode="^" + horiz-adv-x="469" + id="glyph207"><path + d="M116.666 336.836l-90.3238 0 172.326 391.16 70.8255 0 173.338 -391.16 -88.3395 0 -120.654 291.664 -117.172 -291.664z" + id="path209" /></glyph> + <glyph + unicode="]" + horiz-adv-x="277" + id="glyph211"><path + d="M212.841 -198.668l-193.849 0 0 72.668 106.016 0 0 768.997 -106.016 0 0 72.83 193.849 0 0 -914.495z" + id="path213" /></glyph> + <glyph + unicode="\" + horiz-adv-x="277" + id="glyph215"><path + d="M207.496 -12.1687l-207.496 740.165 70.8255 0 207.01 -740.165 -70.3395 0z" + id="path217" /></glyph> + <glyph + unicode="[" + horiz-adv-x="277" + id="glyph219"><path + d="M67.8289 -198.668l0 914.495 193.829 0 0 -72.83 -105.833 0 0 -768.997 105.833 0 0 -72.668 -193.829 0z" + id="path221" /></glyph> + <glyph + unicode="Z" + horiz-adv-x="610" + id="glyph223"><path + d="M20.0045 0l0 87.8333 366.661 458.503c26.1597,32.6591 50.8413,61.0055 74.3283,84.9987l-399.502 0 0 84.4925 512.685 0 0 -84.4925 -401.851 -496.507 -43.4915 -50.3351 457.167 0 0 -84.4925 -565.996 0z" + id="path225" /></glyph> + <glyph + unicode="Y" + horiz-adv-x="666" + id="glyph227"><path + d="M278.827 0l0 303.165 -275.831 412.663 115.167 0 141.165 -215.817c25.9977,-40.3531 50.1731,-80.686 72.668,-121.181 21.5028,37.4982 47.5005,79.6736 78.1753,126.506l138.654 210.492 110.348 0 -285.671 -412.663 0 -303.165 -94.677 0z" + id="path229" /></glyph> + <glyph + unicode="X" + horiz-adv-x="666" + id="glyph231"><path + d="M4.33295 0l277.005 372.998 -244.164 342.829 112.657 0 130.009 -183.664c26.9898,-38.0044 46.1641,-67.3227 57.5027,-87.8333 15.9955,25.9977 34.8256,53.1697 56.6523,81.4959l144.182 190.002 102.999 0 -251.513 -337.322 271.012 -378.505 -117.172 0 -180.162 255.34c-10.1642,14.6591 -20.5106,30.6546 -31.343,47.8244 -15.9955,-25.9977 -27.334,-43.8357 -34.1574,-53.6557l-179.676 -249.509 -113.831 0z" + id="path233" /></glyph> + <glyph + unicode="W" + horiz-adv-x="943" + id="glyph235"><path + d="M202.171 0l-190.002 715.827 97.1674 0 108.992 -469.153c11.6625,-49.181 21.6647,-98.0178 30.1687,-146.51 18.3442,76.4948 28.9943,120.513 32.3351,132.337l136.164 483.326 114.337 0 102.492 -362.328c25.6737,-89.8378 44.1799,-174.33 55.6804,-253.336 8.98986,45.172 20.9966,97.1674 35.6557,155.662l112.171 460.001 95.3249 0 -196.319 -715.827 -91.3361 0 -150.843 545.324c-12.6546,45.6782 -20.1664,73.6804 -22.4949,84.0066 -7.49155,-32.8211 -14.4972,-60.8233 -20.9966,-84.0066l-151.835 -545.324 -96.6612 0z" + id="path237" /></glyph> + <glyph + unicode="V" + horiz-adv-x="666" + id="glyph239"><path + d="M281.662 0l-277.329 715.827 102.675 0 185.993 -519.994c15.0033,-41.6692 27.496,-80.8277 37.4982,-117.172 11.1766,38.9965 23.9932,78.0133 38.6726,117.172l193.322 519.994 96.6814 0 -280.346 -715.827 -97.1674 0z" + id="path241" /></glyph> + <glyph + unicode="U" + horiz-adv-x="722" + id="glyph243"><path + d="M546.842 715.827l94.8187 0 0 -413.655c0,-71.8379 -8.15971,-128.996 -24.4994,-171.334 -16.3194,-42.3374 -45.6579,-76.677 -88.1573,-103.181 -42.4993,-26.6659 -98.1798,-39.8267 -167.163,-39.8267 -66.9987,0 -122.011,11.5005 -164.51,34.6636 -42.6613,23.0011 -73.1742,56.5106 -91.3361,100.346 -18.3239,43.8357 -27.334,103.485 -27.334,179.331l0 413.655 94.677 0 0 -413.169c0,-62.1596 5.83126,-108 17.3318,-137.318 11.5005,-29.5005 31.505,-52.1776 59.4869,-68.1731 28.1844,-15.9955 62.686,-23.9932 103.343,-23.9932 69.6714,0 119.338,15.8335 149.001,47.5005 29.5005,31.4847 44.3419,92.1663 44.3419,181.984l0 413.169z" + id="path245" /></glyph> + <glyph + unicode="T" + horiz-adv-x="610" + id="glyph247"><path + d="M259.329 0l0 631.335 -235.822 0 0 84.4925 567.333 0 0 -84.4925 -236.834 0 0 -631.335 -94.677 0z" + id="path249" /></glyph> + <glyph + unicode="S" + horiz-adv-x="666" + id="glyph251"><path + d="M45.01 229.99l89.3316 7.83575c4.15072,-35.8177 13.991,-65.1562 29.5005,-88.1573 15.4893,-23.0011 39.4825,-41.5072 71.9998,-55.6602 32.4971,-14.1732 69.1652,-21.1788 109.822,-21.1788 36.1619,0 68.0111,5.34532 95.6691,15.9955 27.658,10.8324 48.3306,25.5118 61.8356,44.1799 13.505,18.8301 20.3284,39.1585 20.3284,61.3294 0,22.4949 -6.49942,41.9932 -19.6602,58.839 -12.9988,16.8256 -34.5016,30.8166 -64.3463,42.1551 -19.316,7.51179 -61.6534,19.1743 -127.498,35.0078 -65.6624,15.8335 -111.827,30.6546 -138.168,44.6658 -34.1574,17.838 -59.6489,40.1709 -76.4948,66.6545 -16.6636,26.5039 -25.0056,56.1664 -25.0056,89.1697 0,35.9999 10.1845,69.8334 30.6748,101.176 20.5106,31.505 50.4971,55.3362 89.8378,71.6556 39.5027,16.1777 83.1562,24.3374 131.325,24.3374 53.1697,0 99.84,-8.50392 140.497,-25.6535 40.5151,-17.0078 71.6759,-42.1754 93.5026,-75.3407 21.6647,-33.1653 33.5095,-70.8255 35.1698,-112.839l-90.8299 -6.82338c-5.00111,45.1518 -21.5028,79.4914 -49.6669,102.492 -28.1642,23.1631 -69.6714,34.6636 -124.663,34.6636 -57.3407,0 -99.0099,-10.4882 -125.332,-31.505 -26.1799,-20.9966 -39.3407,-46.3261 -39.3407,-75.8266 0,-25.8357 9.33406,-46.9943 27.8402,-63.4959 18.3239,-16.6636 65.8244,-33.6715 142.825,-51.0033 77.001,-17.4938 129.826,-32.6591 158.497,-45.6579 41.6692,-19.3363 72.506,-43.6737 92.3485,-73.0122 19.8222,-29.5005 29.6625,-63.4959 29.6625,-101.824 0,-38.1664 -10.8324,-74.0043 -32.6793,-107.676 -21.8267,-33.6715 -53.1495,-59.8311 -93.9885,-78.6612 -40.8391,-18.6681 -86.8412,-28.0022 -137.844,-28.0022 -64.8323,0 -119.156,9.33406 -162.83,28.3261 -43.8357,18.8504 -78.1551,47.1765 -103.161,85.1809 -24.8436,37.8222 -38.0044,80.8277 -39.1585,128.652z" + id="path253" /></glyph> + <glyph + unicode="R" + horiz-adv-x="722" + id="glyph255"><path + d="M78.6612 0l0 715.827 317.338 0c63.8401,0 112.333,-6.49942 145.498,-19.3363 33.1653,-12.8166 59.6692,-35.4937 79.6736,-67.9908 19.8222,-32.6591 29.6625,-68.659 29.6625,-108 0,-50.8413 -16.3397,-93.5026 -49.343,-128.328 -32.8211,-34.8458 -83.6624,-56.9965 -152.321,-66.5128 25.1675,-11.9865 44.1596,-23.8312 57.1585,-35.6557 27.6782,-25.3295 53.8379,-57.1787 78.6815,-95.1629l124.481 -194.841 -119.156 0 -94.677 149.001c-27.658,42.8233 -50.4971,75.8266 -68.497,98.5037 -17.8177,22.8188 -33.8334,38.8346 -47.9864,47.8244 -14.1732,9.17208 -28.5084,15.5095 -43.1675,19.1743 -10.8324,2.16647 -28.3464,3.32058 -52.8458,3.32058l-109.822 0 0 -317.824 -94.677 0zm94.677 399.826l203.669 0c43.1675,0 77.1629,4.51518 101.5,13.505 24.4994,9.0101 42.9853,23.3453 55.6602,43.0055 12.6749,19.6602 18.9921,41.001 18.9921,64.1641 0,33.8334 -12.1687,61.6737 -36.8301,83.5004 -24.4994,21.8267 -63.3339,32.6591 -116.504,32.6591l-226.488 0 0 -236.834z" + id="path257" /></glyph> + <glyph + unicode="Q" + horiz-adv-x="777" + id="glyph259"><path + d="M619.672 76.6567c43.8357,-30.3306 84.4925,-52.3193 121.485,-66.3306l-27.82 -65.9864c-51.3272,18.4859 -102.675,47.8244 -153.84,87.8333 -52.9875,-29.5005 -111.503,-44.3419 -175.667,-44.3419 -64.8323,0 -123.489,15.6715 -176.335,46.8323 -52.6635,31.343 -93.3204,75.1787 -121.829,131.831 -28.5084,56.6725 -42.6613,120.513 -42.6613,191.338 0,70.6635 14.3352,135.01 42.9853,192.998 28.6704,57.8266 69.3474,102.007 122.335,132.337 52.8458,30.1687 112.009,45.334 177.347,45.334 66.1686,0 125.656,-15.6715 178.825,-47.1765 53.0078,-31.3228 93.5026,-75.3204 121.343,-131.831 27.82,-56.4903 41.649,-120.168 41.649,-191.156 0,-58.839 -8.82788,-111.847 -26.8278,-158.841 -17.838,-46.9943 -44.8278,-87.9953 -80.9897,-122.841zm-208.508 121.181c54.668,-15.3475 99.6781,-38.1664 135.172,-68.497 55.6602,50.821 83.5004,127.154 83.5004,228.998 0,57.9886 -9.84025,108.668 -29.5005,151.997 -19.6602,43.1675 -48.5128,76.839 -86.335,100.832 -38.0044,23.8312 -80.5038,35.8379 -127.842,35.8379 -70.5015,0 -129.158,-24.1754 -175.667,-72.506 -46.6501,-48.3306 -69.8334,-120.492 -69.8334,-216.668 0,-92.9964 23.0011,-164.49 69.0032,-214.339 46.1641,-49.6669 105.003,-74.6523 176.497,-74.6523 34.0157,0 65.8446,6.3172 95.8311,18.9921 -29.6625,19.3363 -60.9852,33.0033 -93.8266,41.001l23.0011 69.0032z" + id="path261" /></glyph> + <glyph + unicode="P" + horiz-adv-x="666" + id="glyph263"><path + d="M77.1629 0l0 715.827 269.999 0c47.5005,0 83.8446,-2.32845 108.83,-6.82338 35.1698,-5.83126 64.6703,-17.0078 88.5015,-33.5095 23.6692,-16.3194 42.8435,-39.5027 57.3407,-69.0032 14.4972,-29.6625 21.6647,-62.1596 21.6647,-97.6533 0,-60.8435 -19.3363,-112.495 -58.0089,-154.67 -38.8143,-41.9932 -108.83,-63.172 -209.986,-63.172l-183.664 0 0 -290.996 -94.677 0zm94.677 375.509l185.163 0c61.1675,0 104.659,11.3183 130.333,34.1574 25.6737,22.8391 38.4904,54.83 38.4904,96.1753 0,29.9864 -7.49155,55.6602 -22.6569,77.001 -15.1653,21.3205 -35.0078,35.3318 -59.8311,42.1551 -15.9955,4.17097 -45.334,6.33744 -88.3395,6.33744l-183.158 0 0 -255.826z" + id="path265" /></glyph> + <glyph + unicode="o" + horiz-adv-x="556" + id="glyph267"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839z" + id="path269" /></glyph> + <glyph + unicode="n" + horiz-adv-x="556" + id="glyph271"><path + d="M66.0066 0l0 518.496 78.9852 0 0 -73.6601c38.1664,56.9965 93.1786,85.5049 165.017,85.5049 31.3228,0 59.9931,-5.66928 86.1528,-16.8459 26.3419,-11.3183 45.8402,-25.9977 58.839,-44.3216 13.1608,-18.1822 22.1709,-39.8469 27.496,-64.8323 3.17885,-16.3397 4.83913,-44.848 4.83913,-85.5049l0 -318.836 -87.9953 0 0 315.495c0,35.676 -3.34082,62.5038 -10.1642,80.3418 -6.84363,17.6558 -19.0123,31.8289 -36.3441,42.3374 -17.4938,10.6501 -37.8222,15.9955 -61.3294,15.9955 -37.4982,0 -69.6714,-12.0067 -97.0054,-35.676 -27.172,-23.8312 -40.6568,-68.821 -40.6568,-135.334l0 -283.16 -87.8333 0z" + id="path273" /></glyph> + <glyph + unicode="m" + horiz-adv-x="832" + id="glyph275"><path + d="M66.0066 0l0 518.496 78.4993 0 0 -72.668c16.3194,25.3295 37.9842,45.8402 64.9942,61.1675 26.9898,15.5095 57.8266,23.3453 92.3283,23.3453 38.3284,0 69.8334,-7.99773 94.3327,-24.0134 24.6816,-15.9955 42.0134,-38.1664 52.0156,-66.8367 41.163,60.5195 94.4947,90.8502 160.157,90.8502 51.5094,0 90.9919,-14.3352 118.67,-42.8435 27.658,-28.4881 41.487,-72.3238 41.487,-131.507l0 -355.99 -87.3271 0 0 326.672c0,35.1698 -2.83464,60.4993 -8.50392,75.9886 -5.83126,15.3475 -16.1574,27.8402 -30.9988,37.3362 -15.0033,9.33406 -32.6591,14.1732 -52.8255,14.1732 -36.5061,0 -66.6748,-12.1687 -90.8299,-36.5061 -24.0134,-24.1552 -36.1821,-62.9897 -36.1821,-116.321l0 -301.342 -87.8333 0 0 336.836c0,39.1585 -7.14734,68.497 -21.4825,87.9953 -14.3352,19.4983 -37.6805,29.3385 -70.3395,29.3385 -24.6614,0 -47.5005,-6.49942 -68.497,-19.6602 -20.9966,-13.0191 -36.3441,-32.0112 -45.6782,-57.0167 -9.49604,-25.1675 -14.1529,-61.3294 -14.1529,-108.486l0 -269.007 -87.8333 0z" + id="path277" /></glyph> + <glyph + unicode="l" + horiz-adv-x="222" + id="glyph279"><path + d="M64.0021 0l0 715.827 87.8333 0 0 -715.827 -87.8333 0z" + id="path281" /></glyph> + <glyph + unicode="k" + horiz-adv-x="500" + id="glyph283"><path + d="M66.3306 0l0 715.827 87.9953 0 0 -408.168 208.002 210.836 113.669 0 -198.162 -192.33 218.328 -326.166 -108.506 0 -171.334 265.16 -61.9976 -59.6692 0 -205.491 -87.9953 0z" + id="path285" /></glyph> + <glyph + unicode="j" + horiz-adv-x="222" + id="glyph287"><path + d="M65.5004 613.841l0 101.986 87.8333 0 0 -101.986 -87.8333 0zm-111.341 -814.999l16.5017 74.6523c17.676,-4.49493 31.505,-6.82338 41.5072,-6.82338 18,0 31.3228,5.99324 39.9887,17.838 8.84812,11.8245 13.3431,41.649 13.3431,89.1494l0 544.838 87.8333 0 0 -546.822c0,-63.8401 -8.34194,-108.182 -24.8436,-133.35 -21.1586,-32.4971 -56.3283,-48.8165 -105.489,-48.8165 -23.8312,0 -46.8323,3.1586 -68.8412,9.33406z" + id="path289" /></glyph> + <glyph + unicode="i" + horiz-adv-x="222" + id="glyph291"><path + d="M66.3306 614.671l0 101.156 87.9953 0 0 -101.156 -87.9953 0zm0 -614.671l0 518.496 87.9953 0 0 -518.496 -87.9953 0z" + id="path293" /></glyph> + <glyph + unicode="h" + horiz-adv-x="556" + id="glyph295"><path + d="M66.0066 0l0 715.827 87.8333 0 0 -256.818c41.001,47.5005 92.8344,71.3317 155.318,71.3317 38.3486,0 71.6759,-7.67377 100.002,-22.8391 28.3464,-15.0033 48.6748,-35.9999 60.8435,-62.6658 12.1687,-26.6659 18.3239,-65.5004 18.3239,-116.159l0 -328.676 -87.9953 0 0 328.676c0,43.8154 -9.49604,75.8266 -28.5084,95.8311 -18.9921,19.9842 -45.9819,30.1687 -80.8277,30.1687 -25.9977,0 -50.4971,-6.84363 -73.4981,-20.3487 -23.0011,-13.4848 -39.3407,-31.8289 -48.9988,-54.992 -9.84025,-23.0011 -14.6591,-55.0122 -14.6591,-95.6691l0 -283.666 -87.8333 0z" + id="path297" /></glyph> + <glyph + unicode="g" + horiz-adv-x="556" + id="glyph299"><path + d="M49.8289 -43.0055l85.5049 -12.6546c3.5028,-26.3419 13.505,-45.5162 29.6625,-57.6647 21.847,-16.1777 51.6714,-24.3374 89.3316,-24.3374 40.8391,0 72.1821,8.15971 94.3327,24.3374 22.1709,16.3194 37.0123,39.1585 44.848,68.3148 4.65691,18 6.6614,55.5184 6.3172,112.839 -38.3284,-45.172 -86.1528,-67.8289 -143.493,-67.8289 -71.3317,0 -126.506,25.6737 -165.502,77.1629 -38.9965,51.3272 -58.6568,113.163 -58.6568,185.001 0,49.505 8.98986,95.1629 26.8278,136.994 18,41.8514 43.9977,74.1663 77.9931,97.0054 34.0157,22.6771 74.0043,34.1777 119.844,34.1777 61.1675,0 111.665,-24.8436 151.329,-74.3485l0 62.5038 81.1719 0 0 -448.156c0,-80.6657 -8.34194,-138.006 -24.6816,-171.678 -16.4814,-33.6715 -42.4993,-60.3373 -78.1551,-79.8356 -35.676,-19.4983 -79.5116,-29.3183 -131.669,-29.3183 -61.8356,0 -111.827,13.991 -149.831,41.8312 -38.1664,27.82 -56.5106,69.6511 -55.1742,125.656zm72.668 311.507c0,-68.0111 13.505,-117.658 40.6771,-148.839 26.9898,-31.3228 60.8233,-46.8323 101.5,-46.8323 40.3329,0 74.1663,15.5095 101.5,46.5083 27.334,31.1608 41.001,79.8356 41.001,146.328 0,63.4959 -14.0112,111.341 -42.1754,143.493 -28.1642,32.1732 -62.1596,48.3306 -101.824,48.3306 -39.0168,0 -72.1821,-15.8335 -99.6781,-47.6624 -27.334,-31.667 -41.001,-78.8232 -41.001,-141.327z" + id="path301" /></glyph> + <glyph + unicode="f" + horiz-adv-x="277" + id="glyph303"><path + d="M86.8412 0l0 450.161 -77.5071 0 0 68.3351 77.5071 0 0 55.1742c0,34.8256 3.1586,60.8233 9.33406,77.6691 8.48367,22.8188 23.325,41.325 44.6658,55.4982 21.3205,14.1529 51.1652,21.1586 89.6556,21.1586 24.6614,0 51.9954,-2.83464 82.0021,-8.82788l-13.1608 -76.677c-18.1619,3.34082 -35.514,5.00111 -51.8334,5.00111 -26.6659,0 -45.496,-5.64903 -56.5106,-17.1496 -11.1563,-11.3386 -16.6636,-32.6793 -16.6636,-64.0021l0 -47.8447 100.994 0 0 -68.3351 -100.994 0 0 -450.161 -87.4891 0z" + id="path305" /></glyph> + <glyph + unicode="e" + horiz-adv-x="556" + id="glyph307"><path + d="M420.843 167.001l90.8299 -11.1766c-14.3352,-53.1495 -40.8391,-94.3327 -79.5116,-123.651 -38.8346,-29.1765 -88.3193,-43.8357 -148.495,-43.8357 -75.8266,0 -136.002,23.325 -180.324,69.9953 -44.5038,46.6703 -66.6748,112.171 -66.6748,196.501 0,87.3271 22.4949,154.994 67.3227,203.163 45.01,48.1686 103.181,72.344 174.837,72.344 69.3474,0 126,-23.6692 169.835,-70.8457 43.9977,-47.1562 66.0066,-113.669 66.0066,-199.154 0,-5.34532 -0.161979,-13.1811 -0.506186,-23.5073l-386.665 0c3.1586,-56.9965 19.3363,-100.67 48.3306,-130.839 29.0146,-30.3306 65.0145,-45.496 108.344,-45.496 32.1529,0 59.6692,8.50392 82.488,25.4915 22.8391,16.8459 40.8391,43.8357 54.1821,81.0099zm-288.506 142.157l289.498 0c-3.82676,43.5117 -15.0033,76.3328 -33.1653,98.0178 -28.0022,33.8334 -64.3463,50.821 -108.83,50.821 -40.3329,0 -74.3485,-13.505 -101.845,-40.4948 -27.496,-27.0101 -42.6613,-63.172 -45.6579,-108.344z" + id="path309" /></glyph> + <glyph + unicode="d" + horiz-adv-x="556" + id="glyph311"><path + d="M402.337 0l0 65.5004c-32.8413,-51.5094 -81.1719,-77.1629 -145.012,-77.1629 -41.325,0 -79.3294,11.3386 -113.993,34.1574 -34.6636,22.6771 -61.4914,54.5061 -80.6657,95.5071 -18.9921,40.8391 -28.5084,87.6713 -28.5084,140.841 0,51.6512 8.6659,98.6657 25.8357,140.821 17.3318,42.1754 43.1675,74.5105 77.6691,96.8434 34.5016,22.4949 73.1742,33.8334 115.836,33.8334 31.1608,0 59.001,-6.68165 83.3384,-19.8425 24.4994,-13.1608 44.3216,-30.3306 59.6692,-51.4892l0 256.818 87.3271 0 0 -715.827 -81.4959 0zm-277.835 258.843c0,-66.5128 13.991,-116.18 41.9932,-149.001 28.0022,-32.8413 61.0055,-49.343 99.1719,-49.343 38.3284,0 71.0077,15.8335 97.8356,47.1765 26.8278,31.3228 40.3329,79.3294 40.3329,143.817 0,71.0077 -13.667,123.003 -41.001,156.168 -27.334,33.3475 -61.0055,49.8289 -101.176,49.8289 -38.9965,0 -71.6556,-15.9955 -97.8153,-47.8244 -26.1799,-31.8289 -39.3407,-82.164 -39.3407,-150.823z" + id="path313" /></glyph> + <glyph + unicode="c" + horiz-adv-x="500" + id="glyph315"><path + d="M404.341 190.002l86.335 -11.3386c-9.33406,-59.4869 -33.5095,-106.157 -72.506,-139.829 -38.8346,-33.6715 -86.6792,-50.4971 -143.332,-50.4971 -70.8457,0 -128.004,23.1631 -171.01,69.4892 -43.1675,46.3464 -64.8323,112.839 -64.8323,199.498 0,56.0044 9.33406,105.003 27.8402,147.017 18.6681,41.9932 46.8323,73.4981 84.8367,94.4947 37.8222,20.9966 79.1674,31.505 123.651,31.505 56.3486,0 102.513,-14.3352 138.168,-42.8435 35.8379,-28.4881 58.839,-68.821 69.0032,-121.323l-85.5049 -13.1811c-8.15971,34.8458 -22.4949,61.0055 -43.1675,78.6815 -20.6524,17.4938 -45.6579,26.3217 -74.9965,26.3217 -44.3216,0 -80.3215,-15.8335 -108,-47.6624 -27.658,-31.667 -41.487,-81.8401 -41.487,-150.499 0,-69.6714 13.3228,-120.33 40.1506,-151.997 26.6659,-31.505 61.5117,-47.3385 104.517,-47.3385 34.5016,0 63.1517,10.6704 86.335,31.8289 23.1631,21.1788 37.8222,53.6759 43.9977,97.6736z" + id="path317" /></glyph> + <glyph + unicode="b" + horiz-adv-x="556" + id="glyph319"><path + d="M146.996 0l-81.4959 0 0 715.827 87.8333 0 0 -255.32c37.1743,46.4881 84.4925,69.8334 141.995,69.8334 32.0112,0 62.1798,-6.49942 90.668,-19.3363 28.5084,-12.8369 51.8334,-30.9988 70.3395,-54.1619 18.3239,-23.3453 32.8211,-51.3475 43.1675,-84.3508 10.4882,-32.8211 15.6715,-67.9908 15.6715,-105.327 0,-89.0077 -22.0089,-157.667 -66.0066,-206.159 -43.8357,-48.5128 -96.6612,-72.668 -158.173,-72.668 -61.1675,0 -109.154,25.4915 -144,76.6567l0 -64.9942zm-0.992124 263.176c0,-62.1798 8.50392,-107.008 25.3295,-134.686 27.658,-45.3137 65.1562,-67.9908 112.333,-67.9908 38.4904,0 71.6759,16.6636 99.6578,50.1731 28.0022,33.3273 42.0134,82.9942 42.0134,149.163 0,67.6669 -13.505,117.658 -40.3329,149.831 -26.8481,32.1732 -59.3452,48.3306 -97.3294,48.3306 -38.5106,0 -71.6759,-16.6636 -99.6781,-49.9909 -28.0022,-33.3475 -41.9932,-81.6781 -41.9932,-144.83z" + id="path321" /></glyph> + <glyph + unicode="a" + horiz-adv-x="556" + id="glyph323"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351z" + id="path325" /></glyph> + <glyph + unicode="`" + horiz-adv-x="333" + id="glyph327"><path + d="M226.994 583.004l-70.6635 0 -112.839 136.67 117.678 0 65.8244 -136.67z" + id="path329" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph331"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path333" /></glyph> + <glyph + unicode="~" + horiz-adv-x="583" + id="glyph335"><path + d="M42.4993 272.004l0 100.002c34.5016,39.1585 79.6736,58.6568 135.658,58.6568 19.6805,0 40.1709,-2.83464 61.5117,-8.50392 21.5028,-5.64903 52.1574,-16.9876 91.8221,-33.9954 22.5151,-9.49604 39.3407,-15.6715 50.5173,-18.5061 11.3183,-2.99662 22.6569,-4.49493 33.9954,-4.49493 21.1586,0 43.0055,6.33744 65.6624,19.1743 22.6771,12.6546 42.6613,28.6704 60.3373,47.8244l0 -103.485c-20.8346,-19.5185 -41.9932,-33.6715 -63.172,-42.5196 -21.3408,-8.82788 -45.334,-13.1608 -72.1618,-13.1608 -19.4983,0 -38.1664,2.16647 -55.8424,6.84363 -17.6558,4.49493 -45.8199,15.3273 -84.4925,32.6591 -38.5106,17.3318 -70.6635,25.8357 -96.3372,25.8357 -20.8346,0 -40.4948,-4.49493 -58.839,-13.3431 -18.4859,-8.98986 -41.325,-26.6659 -68.659,-52.9875z" + id="path337" /></glyph> + <glyph + unicode="}" + horiz-adv-x="334" + id="glyph339"><path + d="M305.675 298.832l0 -79.6736c-25.0056,-0.485938 -45.5162,-7.32957 -61.3497,-20.4904 -15.6513,-12.9988 -26.1597,-30.6748 -31.4847,-52.8255 -5.18334,-22.3329 -7.99773,-60.6815 -8.17996,-115.005 -0.323959,-54.5061 -1.33633,-90.1618 -2.99662,-107.494 -2.99662,-27.6782 -8.32169,-49.6669 -16.3397,-66.1686 -7.99773,-16.5017 -17.8177,-29.6827 -29.5005,-39.5027 -11.8245,-10.0022 -26.8278,-17.514 -44.9898,-22.6771 -12.3307,-3.66478 -32.4971,-5.48705 -60.4993,-5.48705l-27.334 0 0 76.6567 15.1653 0c33.8334,0 56.1664,6.17546 67.3429,18.3442 10.9944,12.1485 16.4814,39.6647 16.4814,82.326 0,81.3339 1.51856,133.005 4.51518,154.832 5.16309,35.9999 15.6513,64.9942 31.1608,86.659 15.6715,21.5028 37.8424,38.3486 66.4925,50.5173 -37.4982,17.8177 -63.8199,41.487 -79.1674,70.9875 -15.3273,29.5005 -23.0011,79.1674 -23.0011,149.163 0,63.5162 -0.647918,101.338 -2.32845,113.831 -2.32845,21.847 -8.6659,37.0123 -19.3363,45.6782 -10.4882,8.50392 -31.3228,12.8369 -62.1596,12.8369l-15.1653 0 0 76.6567 27.334 0c31.8289,0 54.992,-2.49043 69.3272,-7.83575 20.8346,-7.16759 38.0044,-19.1541 51.6714,-35.9999 13.667,-16.9876 22.6569,-38.3284 26.6659,-64.0021 4.00899,-25.8155 6.33744,-67.9908 6.6614,-126.486 0.182227,-58.677 2.99662,-99.0099 8.17996,-121.343 5.32507,-22.3329 15.8335,-39.9887 31.4847,-52.9875 15.8335,-13.0191 36.3441,-19.8425 61.3497,-20.5106z" + id="path341" /></glyph> + <glyph + unicode="|" + horiz-adv-x="259" + id="glyph343"><path + d="M91.8423 -210.492l0 938.488 76.6567 0 0 -938.488 -76.6567 0z" + id="path345" /></glyph> + <glyph + unicode="{" + horiz-adv-x="334" + id="glyph347"><path + d="M27.8402 298.832c24.9853,0.668165 45.496,7.32957 61.3294,20.3284 15.6715,12.8369 26.1597,30.5129 31.505,52.8458 5.16309,22.4949 7.81551,60.9852 8.15971,115.329 0.323959,54.3238 1.33633,90.1618 2.99662,107.332 2.99662,27.334 8.34194,49.343 16.3397,66.0066 7.99773,16.5017 17.838,29.8245 29.5005,39.8267 11.8245,9.84025 26.8278,17.4938 44.9898,22.6569 12.3307,3.17885 32.4971,4.83913 60.4993,4.83913l27.334 0 0 -76.6567 -15.1653 0c-33.8334,0 -56.1664,-6.01348 -67.3227,-18.3442 -11.0146,-12.1687 -16.5017,-39.3205 -16.5017,-81.6579 0,-85.3429 -1.84252,-139.181 -5.5073,-161.676 -5.83126,-34.8256 -15.8335,-61.6534 -30.0067,-80.5038 -14.1529,-18.9921 -36.3239,-35.6557 -66.6545,-50.3148 35.8379,-15.0033 61.8356,-37.8424 77.9931,-68.6793 15.9955,-30.6546 24.1754,-81.1719 24.1754,-151.167 0,-63.3339 0.485938,-101.156 1.82227,-113.163 2.67266,-22.1709 9.17208,-37.6602 19.8425,-46.5083 10.4882,-8.6659 31.3228,-13.1608 62.1596,-13.1608l15.1653 0 0 -76.6567 -27.334 0c-31.8289,0 -54.992,2.65241 -69.3272,7.81551 -20.8346,7.51179 -38.0044,19.6805 -51.6714,36.3441 -13.667,16.8256 -22.6569,38.0044 -26.6659,63.8401 -3.98874,25.6535 -6.33744,67.8289 -6.6614,126.486 -0.344206,58.5151 -2.99662,99.0099 -8.15971,121.505 -5.34532,22.4949 -15.8335,40.1709 -31.505,53.1697 -15.8335,13.1608 -36.3441,20.0045 -61.3294,20.4904l0 79.6736z" + id="path349" /></glyph> + <glyph + unicode="z" + horiz-adv-x="500" + id="glyph351"><path + d="M19.4983 0l0 71.3317 330.175 378.829c-37.4982,-1.98425 -70.5015,-2.83464 -99.1719,-2.83464l-211.505 0 0 71.1697 423.839 0 0 -57.9886 -280.67 -329.183 -54.1619 -59.9931c39.3205,2.83464 76.3328,4.33295 110.834,4.33295l239.669 0 0 -75.6646 -459.009 0z" + id="path353" /></glyph> + <glyph + unicode="y" + horiz-adv-x="500" + id="glyph355"><path + d="M61.9976 -199.66l-9.84025 82.488c19.3363,-5.16309 35.9999,-7.83575 50.3351,-7.83575 19.4983,0 35.1698,3.34082 46.8323,9.84025 11.8447,6.49942 21.3408,15.5095 28.8323,27.334 5.66928,8.6659 14.5174,30.4926 26.8481,65.3384 1.66029,5.00111 4.33295,11.9865 7.83575,21.5028l-196.683 519.488 94.677 0 108 -300.168c13.829,-38.1664 26.5039,-78.1551 37.4982,-120.168 10.1642,40.3329 22.1709,79.6736 36.1619,118.164l110.834 302.173 87.8333 0 -197.169 -527.324c-21.1586,-56.9965 -37.6602,-96.1753 -49.3227,-117.678 -15.6715,-28.9943 -33.5095,-50.1529 -53.6759,-63.6579 -20.3284,-13.505 -44.3216,-20.3284 -72.3238,-20.3284 -17.0078,0 -35.8379,3.66478 -56.6725,10.8324z" + id="path357" /></glyph> + <glyph + unicode="x" + horiz-adv-x="500" + id="glyph359"><path + d="M7.32957 0l189.496 269.493 -175.322 249.003 109.822 0 79.6736 -121.505c14.8414,-23.1631 27.0101,-42.4993 35.9999,-58.1506 14.3352,21.5028 27.496,40.4948 39.6647,57.1585l87.3271 122.497 105.003 0 -179.169 -244.164 192.836 -274.332 -107.818 0 -106.501 161.169 -28.3464 43.4915 -136.164 -204.661 -106.501 0z" + id="path361" /></glyph> + <glyph + unicode="w" + horiz-adv-x="722" + id="glyph363"><path + d="M161.676 0l-158.679 518.496 90.8299 0 82.5083 -299.338 30.6748 -111.32c1.31608,5.66928 10.3262,41.325 26.8278,106.987l82.488 303.671 90.344 0 77.6691 -300.654 25.9977 -99.1719 29.6625 100.164 88.8254 299.662 85.5049 0 -162.162 -518.496 -91.1741 0 -82.488 310.494 -20.1664 88.5015 -104.841 -398.996 -91.8221 0z" + id="path365" /></glyph> + <glyph + unicode="v" + horiz-adv-x="500" + id="glyph367"><path + d="M210.006 0l-197.331 518.496 92.8344 0 111.32 -310.494c12.0067,-33.5095 23.0011,-68.3351 33.1653,-104.497 7.83575,27.334 18.6681,60.1551 32.6793,98.6657l115.329 316.325 90.3238 0 -196.319 -518.496 -82.0021 0z" + id="path369" /></glyph> + <glyph + unicode="u" + horiz-adv-x="556" + id="glyph371"><path + d="M405.839 0l0 76.1708c-40.5151,-58.677 -95.3451,-87.8333 -164.672,-87.8333 -30.4926,0 -59.163,5.83126 -85.6668,17.4938 -26.5039,11.6625 -46.1641,26.5039 -59.001,44.1596 -12.9988,17.838 -22.0089,39.5027 -27.172,65.1765 -3.5028,17.3318 -5.32507,44.6658 -5.32507,82.164l0 321.165 87.8333 0 0 -287.493c0,-46.0021 1.82227,-76.839 5.32507,-92.8344 5.66928,-23.1631 17.3318,-41.163 35.1698,-54.5061 18,-13.1608 40.1709,-19.6602 66.5128,-19.6602 26.3217,0 50.983,6.6614 74.1663,20.1664 23.1631,13.505 39.4825,31.9909 48.9988,55.1742 9.65802,23.325 14.4972,57.1585 14.4972,101.318l0 277.835 87.8333 0 0 -518.496 -78.4993 0z" + id="path373" /></glyph> + <glyph + unicode="t" + horiz-adv-x="277" + id="glyph375"><path + d="M257.831 78.6612l12.6749 -77.6691c-24.6816,-5.16309 -46.8323,-7.81551 -66.3306,-7.81551 -32.0112,0 -56.6725,4.98087 -74.3485,15.1653 -17.4938,9.98198 -29.8245,23.325 -36.992,39.8267 -7.16759,16.3397 -10.8324,51.0033 -10.8324,103.667l0 298.326 -64.5083 0 0 68.3351 64.5083 0 0 128.51 87.4891 52.6635 0 -181.174 88.3395 0 0 -68.3351 -88.3395 0 0 -303.165c0,-25.1675 1.51856,-41.163 4.51518,-48.3306 3.1586,-7.16759 8.15971,-12.8369 15.1653,-17.1698 6.98536,-4.17097 16.9876,-6.33744 29.9864,-6.33744 9.84025,0 22.6771,1.17435 38.6726,3.5028z" + id="path377" /></glyph> + <glyph + unicode="s" + horiz-adv-x="500" + id="glyph379"><path + d="M30.8368 154.832l86.821 13.667c4.83913,-34.8256 18.5061,-61.4914 40.8391,-80.1595 22.1709,-18.5061 53.3317,-27.8402 93.5026,-27.8402 40.3329,0 70.3395,8.34194 89.8378,24.6614 19.4983,16.5017 29.3385,35.8379 29.3385,57.8469 0,19.9842 -8.6659,35.4937 -26.0179,46.9943 -11.9865,7.83575 -41.9932,17.6558 -89.8176,29.6625 -64.3463,16.3397 -109.174,30.3306 -133.997,42.3374 -24.8436,11.8245 -43.8357,28.3261 -56.6725,49.3227 -12.8369,21.0168 -19.3363,44.1799 -19.3363,69.5094 0,23.1631 5.32507,44.5038 15.9955,64.1641 10.5084,19.8425 25.0056,36.1619 43.1675,49.1607 13.667,10.0022 32.3351,18.6681 55.8424,25.6737 23.6692,7.00561 48.9988,10.5084 75.9886,10.5084 40.6771,0 76.3328,-6.01348 107.17,-17.676 30.8368,-11.6625 53.4937,-27.496 68.1731,-47.5005 14.6591,-20.1664 24.6614,-46.8323 30.1687,-80.3215l-85.8491 -11.8447c-3.98874,26.6659 -15.3273,47.5005 -33.9954,62.5038 -18.6681,15.0033 -45.1518,22.4949 -79.3294,22.4949 -40.3329,0 -69.1652,-6.6614 -86.335,-20.0045 -17.3318,-13.3228 -25.9977,-28.9943 -25.9977,-46.8323 0,-11.5005 3.66478,-21.6647 10.8324,-30.8166 7.16759,-9.51629 18.3442,-17.1698 33.6715,-23.5073 8.82788,-3.17885 34.6636,-10.6704 77.6691,-22.3329 62.1596,-16.6636 105.489,-30.1687 129.988,-40.8391 24.6816,-10.4882 43.9977,-25.9977 58.0089,-46.1641 13.991,-20.1664 20.9966,-45.172 20.9966,-75.1584 0,-29.3385 -8.6659,-56.8345 -25.6737,-82.8322 -17.1496,-25.8357 -41.8312,-45.8402 -73.9841,-60.0134 -32.1732,-14.1529 -68.6793,-21.1586 -109.336,-21.1586 -67.5049,0 -118.832,13.991 -154.164,41.9932 -35.3318,28.0022 -57.8469,69.5094 -67.5049,124.501z" + id="path381" /></glyph> + <glyph + unicode="r" + horiz-adv-x="333" + id="glyph383"><path + d="M64.9942 0l0 518.496 79.0054 0 0 -78.4993c20.1664,36.6681 38.8346,61.0055 56.0044,72.668 16.9876,11.6625 35.8379,17.676 56.3283,17.676 29.6625,0 59.6692,-9.51629 90.344,-28.3464l-30.3509 -81.6579c-21.3205,12.8369 -42.8233,19.1541 -64.3261,19.1541 -19.3363,0 -36.5061,-5.83126 -51.8334,-17.3318 -15.3273,-11.6625 -26.1597,-27.658 -32.6591,-48.1686 -9.84025,-31.1608 -14.6794,-65.3182 -14.6794,-102.492l0 -271.498 -87.8333 0z" + id="path385" /></glyph> + <glyph + unicode="q" + horiz-adv-x="556" + id="glyph387"><path + d="M396.505 -198.668l0 253.842c-13.667,-19.1743 -32.8413,-35.1698 -57.3407,-47.8447 -24.6614,-12.6546 -50.8413,-18.9921 -78.4993,-18.9921 -61.4914,0 -114.499,24.4994 -158.841,73.6601 -44.4836,49.1607 -66.6545,116.504 -66.6545,202.171 0,51.9954 8.98986,98.8277 27.172,140.173 18,41.325 44.1596,72.668 78.4993,93.9885 34.3194,21.3408 71.9998,32.0112 113.001,32.0112 64.1641,0 114.661,-27.0101 151.491,-81.1719l0 69.3272 79.0054 0 0 -717.164 -87.8333 0zm-271.012 459.333c0,-66.6748 14.0112,-116.666 42.0134,-149.993 28.0022,-33.5095 61.4914,-50.1731 100.488,-50.1731 37.4982,0 69.6714,15.8335 96.6814,47.6624 27.1518,31.667 40.6568,79.9976 40.6568,144.83 0,69.0032 -14.3352,120.837 -42.8233,155.682 -28.5084,34.8256 -61.8356,52.3193 -100.346,52.3193 -38.0044,0 -70.3395,-16.3194 -96.8232,-48.6546 -26.5039,-32.3351 -39.8469,-82.8322 -39.8469,-151.673z" + id="path389" /></glyph> + <glyph + unicode="p" + horiz-adv-x="556" + id="glyph391"><path + d="M66.0066 -198.668l0 717.164 79.9976 0 0 -67.3227c18.8301,26.3217 40.1709,46.1641 64.0021,59.325 23.6692,13.1608 52.5016,19.8425 86.335,19.8425 44.3216,0 83.3181,-11.5005 117.152,-34.1777 34.0157,-22.8391 59.5072,-54.992 76.677,-96.4992 17.3318,-41.5072 25.9977,-87.0032 25.9977,-136.488 0,-53.0078 -9.49604,-100.852 -28.6704,-143.352 -18.9921,-42.4993 -46.6703,-74.9965 -82.9942,-97.6533 -36.3441,-22.4949 -74.5105,-33.8334 -114.499,-33.8334 -29.3385,0 -55.4982,6.15522 -78.8435,18.4859 -23.325,12.3509 -42.3171,28.0022 -57.3205,46.8525l0 -252.344 -87.8333 0zm79.4914 455c0,-66.6748 13.505,-115.997 40.4948,-148.009 27.0101,-31.8289 59.8311,-47.8244 98.1798,-47.8244 38.9965,0 72.4858,16.5017 100.326,49.6669 27.8402,33.0033 41.8312,84.1685 41.8312,153.496 0,66.1686 -13.667,115.512 -40.8391,148.495 -27.1518,32.8413 -59.6489,49.343 -97.3294,49.343 -37.4982,0 -70.6635,-17.4938 -99.4958,-52.5016 -28.8323,-35.0078 -43.1675,-85.9908 -43.1675,-152.666z" + id="path393" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph395"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path397" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph399"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path401" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph403"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path405" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph407"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path409" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph411"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path413" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph415"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path417" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph419"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path421" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph423"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path425" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph427"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path429" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph431"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path433" /></glyph> + <glyph + unicode=" " + horiz-adv-x="750" + id="glyph435"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path437" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph439"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path441" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph443"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path445" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph447"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path449" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph451"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path453" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph455"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path457" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph459"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path461" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph463"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path465" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph467"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path469" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph471"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path473" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph475"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path477" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph479"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path481" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph483"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path485" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph487"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path489" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph491"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path493" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph495"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path497" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph499"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path501" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph503"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path505" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph507"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path509" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph511"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path513" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph515"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path517" /></glyph> + <glyph + unicode="" + horiz-adv-x="750" + id="glyph519"><path + d="M125.008 0l0 624.997 499.99 0 0 -624.997 -499.99 0zm15.6513 15.6715l468.667 0 0 593.654 -468.667 0 0 -593.654z" + id="path521" /></glyph> + <glyph + unicode="¯" + horiz-adv-x="552" + id="glyph523"><path + d="M-15.1653 764.664l0 63.01 582.498 0 0 -63.01 -582.498 0z" + id="path525" /></glyph> + <glyph + unicode="®" + horiz-adv-x="736" + id="glyph527"><path + d="M370.163 727.996c61.8356,0 122.173,-15.8335 181.174,-47.5005 58.839,-31.8289 104.821,-77.1629 137.662,-136.326 32.8413,-59.001 49.343,-120.675 49.343,-184.839 0,-63.4959 -16.1777,-124.501 -48.6748,-182.996 -32.3351,-58.677 -77.8311,-104.173 -136.164,-136.508 -58.4948,-32.4971 -119.5,-48.6546 -183.34,-48.6546 -63.8401,0 -124.987,16.1574 -183.32,48.6546 -58.5151,32.3351 -104.011,77.8311 -136.508,136.508 -32.6591,58.4948 -48.8368,119.5 -48.8368,182.996 0,64.1641 16.5017,125.838 49.505,184.839 33.0033,59.163 79.0054,104.497 138.006,136.326 58.8188,31.667 119.318,47.5005 181.154,47.5005zm0 -61.0055c-51.8334,0 -102.168,-13.3228 -151.167,-39.8267 -48.9988,-26.5039 -87.3271,-64.488 -115.005,-113.669 -27.658,-49.3227 -41.487,-100.67 -41.487,-154.164 0,-53.0078 13.667,-103.829 40.8391,-152.504 27.1518,-48.6546 65.1562,-86.659 113.993,-113.831 48.8368,-27.172 99.6578,-40.8391 152.828,-40.8391 53.0078,0 104.011,13.667 152.828,40.8391 48.8368,27.172 86.6792,65.1765 113.669,113.831 27.0101,48.6748 40.5151,99.4958 40.5151,152.504 0,53.4937 -13.667,104.841 -41.1833,154.164 -27.496,49.181 -65.8244,87.1652 -114.985,113.669 -49.181,26.5039 -99.5161,39.8267 -150.843,39.8267zm-161.655 -511.166l0 396.343 136.164 0c46.6703,0 80.3215,-3.5028 101.156,-10.8324 20.8346,-7.32957 37.3362,-20.1664 49.8289,-38.3284 12.3509,-18.3442 18.5061,-37.6805 18.5061,-58.1708 0,-28.9943 -10.3262,-54.1619 -30.9988,-75.6646 -20.6726,-21.5028 -48.1686,-33.5095 -82.326,-36.1619 13.991,-5.85151 25.3295,-12.8369 33.6715,-21.0168 15.9955,-15.6513 35.4937,-41.8312 58.6568,-78.6612l48.3306 -77.5071 -78.1551 0 -35.1698 62.5038c-27.6782,48.9988 -49.8289,79.8356 -66.8367,92.1663 -11.6625,9.17208 -28.8323,13.667 -51.3272,13.667l-37.4982 0 0 -168.337 -64.0021 0zm64.0021 223.005l77.6489 0c37.0123,0 62.3418,5.66928 75.8468,16.6636 13.4848,11.0146 20.3284,25.6737 20.3284,43.9977 0,11.6828 -3.34082,22.1709 -9.84025,31.505 -6.49942,9.17208 -15.4893,16.1777 -26.9898,20.6726 -11.6625,4.65691 -33.0033,6.82338 -64.3463,6.82338l-72.6478 0 0 -119.662z" + id="path529" /></glyph> + <glyph + unicode="" + horiz-adv-x="333" + id="glyph531"><path + d="M31.667 214.825l0 88.3395 270.161 0 0 -88.3395 -270.161 0z" + id="path533" /></glyph> + <glyph + unicode="¬" + horiz-adv-x="583" + id="glyph535"><path + d="M528.336 207.01l-82.9942 0 0 213.833 -389.682 0 0 82.164 472.676 0 0 -295.997z" + id="path537" /></glyph> + <glyph + unicode="«" + horiz-adv-x="556" + id="glyph539"><path + d="M166.009 257.831l126.486 -222.661 -71.3317 0 -155.662 222.661 155.662 222.661 72.344 0 -127.498 -222.661zm188.989 0l128.834 -222.661 -74.1663 0 -152.828 222.661 152.828 222.661 74.1663 0 -128.834 -222.661z" + id="path541" /></glyph> + <glyph + unicode="ª" + horiz-adv-x="370" + id="glyph543"><path + d="M267.509 416.51c-39.685,-34.8458 -81.3339,-52.1776 -125.008,-52.1776 -36.6681,0 -65.8446,10.0022 -87.3271,30.0067 -21.5028,20.0045 -32.1732,45.6579 -32.1732,76.8187 0,15.6715 2.49043,29.3385 7.83575,41.001 5.16309,11.8447 12.8369,22.1709 23.1631,31.343 10.1642,8.98986 23.5073,16.3397 39.8267,21.9887 11.3386,3.5028 27.5162,7.00561 48.3306,10.1845l71.6759 10.8324c23.5073,4.49493 39.1585,7.65353 46.8323,9.65802 -0.161979,22.8391 -2.49043,38.1664 -6.82338,46.0021 -4.17097,7.67377 -12.0067,14.4972 -23.6692,20.1664 -11.5005,5.66928 -26.8481,8.50392 -46.0021,8.50392 -25.8357,0 -45.01,-5.16309 -57.6647,-15.8335 -12.6749,-10.5084 -20.5106,-25.6737 -23.5073,-45.172l-66.8367 16.6636c3.84701,28.9943 18.1619,53.1697 43.0055,72.506 24.6614,19.3363 59.9931,28.9943 105.833,28.9943 53.4937,0 91.1741,-9.82 113.325,-29.8245 21.847,-20.1664 32.6793,-49.505 32.6793,-88.3395l0 -117.172 -0.506186 -29.8245c0,-43.5117 6.6614,-73.4981 20.1664,-89.8378l-72.3238 0c-6.49942,12.9988 -10.1845,27.496 -10.8324,43.5117zm-7.16759 122.497c-17.3318,-4.51518 -48.5128,-10.3464 -93.8468,-17.514 -29.3183,-4.49493 -48.3306,-10.9944 -57.1585,-18.9921 -9.0101,-8.50392 -13.667,-18.9921 -13.667,-31.343 0,-13.3228 5.5073,-24.6614 16.6636,-34.1574 10.9944,-9.49604 26.6659,-14.1732 46.8323,-14.1732 23.8312,0 44.5038,6.33744 61.9976,19.0123 17.676,12.8369 29.3385,28.3261 35.1698,46.9943 2.32845,6.49942 3.66478,23.1631 4.00899,50.1731z" + id="path545" /></glyph> + <glyph + unicode="©" + horiz-adv-x="736" + id="glyph547"><path + d="M370.163 727.996c61.8356,0 122.173,-15.8335 181.174,-47.5005 58.839,-31.8289 104.821,-77.1629 137.662,-136.326 32.8413,-59.001 49.343,-120.675 49.343,-184.839 0,-63.4959 -16.1777,-124.501 -48.6748,-182.996 -32.3351,-58.677 -77.8311,-104.173 -136.164,-136.508 -58.4948,-32.4971 -119.5,-48.6546 -183.34,-48.6546 -63.8401,0 -124.987,16.1574 -183.32,48.6546 -58.5151,32.3351 -104.011,77.8311 -136.508,136.508 -32.6591,58.4948 -48.8368,119.5 -48.8368,182.996 0,64.1641 16.5017,125.838 49.505,184.839 33.0033,59.163 79.0054,104.497 138.006,136.326 58.8188,31.667 119.318,47.5005 181.154,47.5005zm0 -61.0055c-51.8334,0 -102.168,-13.3228 -151.167,-39.8267 -48.9988,-26.5039 -87.3271,-64.488 -115.005,-113.669 -27.658,-49.3227 -41.487,-100.67 -41.487,-154.164 0,-53.0078 13.667,-103.829 40.8391,-152.504 27.1518,-48.6546 65.1562,-86.659 113.993,-113.831 48.8368,-27.172 99.6578,-40.8391 152.828,-40.8391 53.0078,0 104.011,13.667 152.828,40.8391 48.8368,27.172 86.6792,65.1765 113.669,113.831 27.0101,48.6748 40.5151,99.4958 40.5151,152.504 0,53.4937 -13.667,104.841 -41.1833,154.164 -27.496,49.181 -65.8244,87.1652 -114.985,113.669 -49.181,26.5039 -99.5161,39.8267 -150.843,39.8267zm118.164 -367.167l60.0134 -17.6558c-9.84025,-40.6771 -30.5129,-73.1742 -62.1798,-97.3294 -31.8289,-24.3374 -70.3193,-36.3441 -115.491,-36.3441 -57.3407,0 -103.829,18.5061 -139.667,55.6804 -35.8379,36.992 -53.8379,88.5015 -53.8379,154.164 0,42.9853 8.15971,80.3215 24.4994,112.171 16.3397,31.667 39.5027,55.6602 69.5094,71.6556 30.1687,16.1777 64.65,24.1754 103.323,24.1754 43.3295,0 79.3294,-10.3464 108,-30.9988 28.5084,-20.6726 48.1686,-48.6748 58.4948,-84.1685l-58.1506 -14.1732c-9.67827,24.1754 -24.1754,42.4993 -43.1675,55.4982 -19.0123,12.8369 -41.3452,19.1743 -67.181,19.1743 -37.316,0 -68.1528,-13.3431 -92.4902,-40.0089 -24.1754,-26.6659 -36.3441,-64.9942 -36.3441,-114.661 0,-49.8289 11.5005,-87.5094 34.3396,-113.163 23.0011,-25.5118 52.6635,-38.3486 89.1697,-38.3486 29.3385,0 54.992,8.50392 77.1629,25.5118 22.1709,16.8256 36.8301,39.8267 43.9977,68.821z" + id="path549" /></glyph> + <glyph + unicode="¨" + horiz-adv-x="333" + id="glyph551"><path + d="M29.8245 620.158l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path553" /></glyph> + <glyph + unicode="§" + horiz-adv-x="556" + id="glyph555"><path + d="M69.8334 -34.1574l88.3395 12.6546c9.15184,-42.3374 23.6692,-71.9998 43.4915,-89.1697 19.8425,-16.9876 46.8323,-25.4915 81.0099,-25.4915 33.3273,0 59.163,8.32169 77.9931,25.3295 18.6681,17.0078 28.0022,36.8301 28.0022,59.5072 0,16.6636 -5.83126,31.9909 -17.4938,46.0021 -20.3487,24.3172 -75.6849,64.3261 -166.171,119.662 -48.1686,29.5005 -81.6781,52.6635 -100.832,69.4892 -19.0123,16.8459 -34.5016,36.5061 -46.5083,59.3452 -12.1687,22.8188 -18.1619,46.4881 -18.1619,71.3317 0,31.1608 9.84025,59.4869 29.3385,84.8367 19.4983,25.4915 46.3261,43.1675 80.4835,53.3317 -23.0011,22.1709 -39.3205,42.4993 -48.6546,61.3294 -9.49604,18.6681 -14.1732,38.4904 -14.1732,59.6692 0,41.6692 16.1777,77.8311 48.8368,108.506 32.4971,30.4926 75.6646,45.8199 129.341,45.8199 60.8233,0 108.324,-14.4972 142.501,-43.4915 34.1574,-28.8323 54.6478,-70.8457 61.6534,-125.838l-91.3361 -9.33406c-6.82338,39.6647 -18.8301,67.3429 -35.9999,82.9942 -16.9876,15.6715 -39.9887,23.5073 -68.983,23.5073 -30.0067,0 -54.1821,-8.15971 -72.506,-24.1754 -18.5061,-16.1574 -27.6782,-33.9954 -27.6782,-53.4937 0,-17.0078 5.83126,-32.6591 17.676,-46.8323 18.1619,-22.1709 67.9908,-58.0089 149.325,-107.494 51.1652,-31.343 85.6668,-54.1821 103.505,-68.8412 23.1631,-19.4983 40.1709,-39.6647 51.0033,-60.4993 10.9944,-20.8346 16.5017,-43.4915 16.5017,-67.9908 0,-36.6681 -12.0067,-68.1731 -35.676,-94.1708 -13.667,-15.0033 -38.8346,-30.1687 -75.3204,-45.496 26.1597,-19.8425 45.496,-41.1833 58.4948,-63.8401 12.8369,-22.8391 19.1743,-47.3385 19.1743,-73.3362 0,-28.6704 -8.17996,-55.6602 -24.3374,-81.3339 -16.3397,-25.4915 -39.6647,-44.9898 -70.3395,-58.4948 -30.6748,-13.505 -63.6579,-20.3284 -99.1719,-20.3284 -62.1596,0 -111.503,15.6513 -147.826,46.6501 -36.5061,31.181 -58.3328,74.3485 -65.5004,129.685zm285.671 153.334c23.9932,12.3307 41.9932,26.6659 53.9999,43.1473 11.8245,16.5017 17.6558,32.5174 17.6558,48.1686 0,18.5061 -8.32169,38.0044 -25.3295,58.5151 -17.1698,20.4904 -53.8379,47.9864 -109.822,82.488 -44.6658,27.334 -77.8513,49.8289 -99.6781,67.5049 -26.3217,-15.0033 -45.172,-30.0067 -56.3283,-45.01 -11.1766,-14.9831 -16.8256,-31.4847 -16.8256,-49.8289 0,-20.4904 7.49155,-39.9887 22.4949,-58.4948 14.8211,-18.6681 48.6546,-43.3295 100.994,-74.3283 43.6737,-25.6737 81.1719,-49.6669 112.839,-72.1618z" + id="path557" /></glyph> + <glyph + unicode="¦" + horiz-adv-x="259" + id="glyph559"><path + d="M168.499 727.996l0 -385.653 -76.6567 0 0 385.653 76.6567 0zm0 -552.167l0 -386.321 -76.6567 0 0 386.321 76.6567 0z" + id="path561" /></glyph> + <glyph + unicode="¥" + horiz-adv-x="556" + id="glyph563"><path + d="M232.825 0l0 158.659 -202.494 0 0 67.8491 202.494 0 0 69.8334 -202.494 0 0 72.3238 166.495 0 -198.324 347.162 97.6736 0 141.651 -251.999c15.8335,-28.6704 28.3464,-53.6557 37.0123,-75.1584 7.49155,17.3318 20.8346,43.8357 40.1709,79.6736l133.653 247.484 104.497 0 -197.655 -347.162 166.495 0 0 -72.3238 -201.158 0 0 -69.8334 201.158 0 0 -67.8491 -201.158 0 0 -158.659 -88.0156 0z" + id="path565" /></glyph> + <glyph + unicode="¤" + horiz-adv-x="556" + id="glyph567"><path + d="M103.991 469.173l-67.8289 66.4925 56.1664 58.1708 67.8289 -68.0111c34.5016,23.5073 73.0122,35.1698 115.674,35.1698 43.0055,0 81.6781,-11.6625 115.836,-35.1698l67.8289 68.0111 56.6725 -58.1708 -67.9908 -66.4925c23.1631,-35.676 34.6636,-74.0043 34.6636,-114.681 0,-41.001 -11.5005,-79.4914 -34.6636,-115.167l67.9908 -66.4925 -56.6725 -58.1708 -67.8289 68.497c-34.1574,-23.8312 -72.83,-35.6557 -115.836,-35.6557 -42.6613,0 -81.1719,11.8245 -115.674,35.6557l-67.8289 -68.497 -56.1664 58.1708 67.8289 66.4925c-23.1631,35.676 -34.6636,74.1663 -34.6636,115.167 0,40.6771 11.5005,79.0054 34.6636,114.681zm45.01 -114.681c0,-35.1495 12.3307,-65.1562 36.992,-89.8176 24.8436,-24.8436 54.5061,-37.1743 89.3316,-37.1743 34.8458,0 64.6703,12.3307 89.3519,37.1743 24.8233,24.6614 37.154,54.668 37.154,89.8176 0,34.8458 -12.3307,64.6703 -36.8301,89.3316 -24.6614,24.8436 -54.5061,37.1743 -89.6758,37.1743 -34.8256,0 -64.488,-12.3307 -89.3316,-37.1743 -24.6614,-24.6614 -36.992,-54.4858 -36.992,-89.3316z" + id="path569" /></glyph> + <glyph + unicode="£" + horiz-adv-x="556" + id="glyph571"><path + d="M193.343 395.007l153.82 0 0 -72.1821 -138.654 0c6.15522,-14.3149 9.33406,-28.6501 9.33406,-42.9853 0,-28.3464 -6.84363,-58.3328 -20.3487,-89.8378 -13.4848,-31.667 -35.6557,-63.8401 -66.6545,-96.6612 25.6535,7.16759 49.1607,10.6501 70.3193,10.6501 27.0101,0 57.5027,-3.98874 91.3361,-12.1485 56.0044,-13.3431 93.8468,-20.0045 113.831,-20.0045 24.0134,0 55.3362,8.98986 93.6848,27.334l28.3261 -80.6657c-30.0067,-12.6749 -53.1697,-20.9966 -69.6714,-24.8436 -16.3397,-3.98874 -32.6591,-5.83126 -48.9988,-5.83126 -13.667,0 -27.496,1.33633 -41.5072,3.82676 -8.82788,1.68054 -29.8245,7.67377 -63.1517,17.838 -33.5095,10.3464 -55.0122,16.3397 -64.8323,18.3442 -15.1653,2.65241 -30.5129,3.82676 -45.8402,3.82676 -23.5073,0 -48.4926,-4.00899 -74.9965,-12.1687 -26.5039,-8.15971 -50.6793,-19.1743 -72.506,-33.1653l-33.6715 84.4925c31.343,17.1698 57.8469,41.8312 79.6736,74.0043 21.8267,32.0112 32.6591,71.1697 32.6591,117.334 0,19.8425 -2.83464,40.0089 -8.32169,60.6613l-95.6691 0 0 72.1821 75.1584 0c-10.6704,36.4859 -17.4938,63.1517 -20.4904,79.8356 -2.99662,16.8256 -4.33295,33.1653 -4.33295,49.1607 0,67.6669 25.0056,120.492 75.1584,158.659 40.3329,30.1687 89.1697,45.334 146.51,45.334 58.8188,0 107.494,-16.1574 145.66,-48.4926 38.3284,-32.4971 61.8356,-78.0133 70.6635,-136.508l-87.4891 -13.1608c-4.83913,38.9965 -19.4983,69.8334 -43.6737,92.1663 -24.3374,22.4949 -53.3317,33.8334 -87.1652,33.8334 -36.1619,0 -66.1686,-11.6625 -89.9998,-35.0078 -23.9932,-23.325 -35.9999,-51.3272 -35.9999,-84.1685 0,-36.1619 9.33406,-83.3181 27.8402,-141.651z" + id="path573" /></glyph> + <glyph + unicode="¢" + horiz-adv-x="556" + id="glyph575"><path + d="M363.34 436.494l-108.506 -373.99c10.8324,-2.99662 20.6726,-4.33295 29.8245,-4.33295 33.8334,0 63.01,11.5005 87.6713,34.6636 24.4994,23.0011 39.6647,55.4982 45.172,97.1674l87.3271 -9.84025c-10.6704,-60.1551 -36.1619,-107.494 -76.3328,-141.995 -40.1709,-34.6636 -87.6713,-51.8334 -142.339,-51.8334 -15.9955,0 -32.6591,2.32845 -50.3148,6.84363l-57.6849 -192.836 -54.6478 15.6513 56.1664 194.335c-37.3362,17.838 -68.0111,47.6827 -91.8423,89.5139 -23.6692,41.8312 -35.676,94.1505 -35.676,156.999 0,57.9886 9.67827,107.656 28.6704,149.163 19.0123,41.5072 47.5005,72.668 85.5049,93.5026 37.8424,20.8346 76.4948,31.3228 115.836,31.3228 11.8245,0 28.0022,-1.33633 48.8368,-3.98874l55.154 188.989 53.8379 -15.6513 -54.668 -189.01c32.1732,-13.991 56.8345,-32.6591 74.1663,-56.3283 17.1698,-23.6692 29.3385,-53.1697 36.1619,-88.6635l-85.4846 -13.1811c-8.50392,36.5061 -24.1754,64.3463 -46.8323,83.5004zm-51.8334 22.5151c-10.3464,0.992124 -18.5061,1.49831 -24.3374,1.49831 -26.6659,0 -51.6714,-7.51179 -74.9965,-22.3329 -23.3453,-14.6794 -40.6771,-37.6805 -52.3396,-68.8412 -11.5005,-30.9988 -17.3318,-67.1607 -17.3318,-108.162 0,-42.8435 5.32507,-79.1674 15.6715,-108.83 10.4882,-29.6827 25.3295,-51.5094 44.5038,-65.8446l108.83 372.512z" + id="path577" /></glyph> + <glyph + unicode="¡" + horiz-adv-x="333" + id="glyph579"><path + d="M218.328 518.496l0 -100.002 -101.156 0 0 100.002 101.156 0zm-23.0011 -178.157l26.8481 -378.829 0 -158.841 -108.85 0 0 158.841 25.3498 378.829 56.6523 0z" + id="path581" /></glyph> + <glyph + unicode=" " + horiz-adv-x="277" + id="glyph583" /> + <glyph + unicode="¿" + horiz-adv-x="610" + id="glyph585"><path + d="M357.833 518.496l0 -100.002 -100.002 0 0 100.002 100.002 0zm-5.83126 -176.153c0.323959,-11.1766 0.506186,-19.3363 0.506186,-25.0056 0,-35.8379 -4.83913,-66.1686 -14.6794,-91.3361 -7.16759,-18.8301 -18.6681,-37.8424 -34.6636,-56.9965 -11.6625,-14.0112 -32.6591,-34.3396 -63.172,-61.1675 -30.4926,-26.6659 -50.1529,-48.0066 -59.163,-63.8401 -8.82788,-15.9955 -13.3228,-33.4892 -13.3228,-52.3396 0,-34.4814 13.3228,-64.65 39.9887,-90.3238 26.6659,-25.6737 59.5072,-38.5106 98.1798,-38.5106 37.154,0 68.3148,11.6828 93.4824,35.1698 25.1675,23.3453 41.8514,59.8311 49.505,109.336l89.8378 -10.3262c-7.99773,-66.0066 -32.1732,-117.01 -72.506,-152.828 -40.1709,-35.676 -93.1584,-53.6759 -158.821,-53.6759 -70.3395,0 -126.344,18.9921 -167.831,57.1585 -41.5072,38.0044 -62.1798,84.1685 -62.1798,138.168 0,31.505 7.16759,60.3373 21.6647,86.497 14.4972,26.0179 43.1675,57.8469 85.6668,95.6691 29.0146,25.6737 48.0066,44.5038 56.6725,56.6725 8.82788,12.0067 15.3273,25.8357 19.3363,41.5072 3.98874,15.4893 6.49942,41.001 7.00561,76.1708l84.4925 0z" + id="path587" /></glyph> + <glyph + unicode="¾" + horiz-adv-x="833" + id="glyph589"><path + d="M123.003 -27.8402l537.67 755.836 76.6567 0 -537.67 -755.836 -76.6567 0zm-106.846 481.504l71.1697 7.32957c6.49942,-19.6602 15.0033,-33.0033 25.5118,-40.1506 13.991,-9.67827 30.4926,-14.5174 49.8289,-14.5174 23.0011,0 41.6692,6.33744 55.6602,19.0123 14.0112,12.6546 20.9966,28.0022 20.9966,45.8199 0,16.3397 -5.99324,29.3385 -17.6558,39.1788 -11.6625,9.65802 -31.1608,14.4972 -58.4948,14.4972 -16.3397,-0.830144 -25.8357,-1.33633 -28.3464,-1.33633l10.6704 53.6759c26.3419,-0.344206 45.6782,4.33295 57.8266,14.1529 12.1687,9.67827 18.3442,21.6647 18.3442,35.676 0,12.0067 -4.83913,22.3329 -14.6591,30.6546 -9.67827,8.50392 -24.1754,12.6749 -43.5117,12.6749 -18.1619,0 -32.3351,-3.5028 -42.6613,-10.6704 -10.1642,-7.16759 -19.1743,-20.1664 -26.6659,-38.9965l-69.8334 11.1766c13.505,34.5016 30.3306,58.6568 50.6591,72.3238 20.3284,13.667 50.0111,20.5106 89.0077,20.5106 46.9943,0 80.9897,-8.84812 102.33,-26.1799 21.3408,-17.4938 31.9909,-39.1585 31.9909,-65.1562 0,-18 -5.83126,-33.8334 -17.3318,-47.8447 -11.5005,-13.991 -28.1642,-24.1552 -49.9909,-30.3306 28.9943,-7.16759 50.3351,-18.9921 64.0021,-35.3318 13.667,-16.5017 20.4904,-35.8379 20.4904,-58.0089 0,-30.1484 -12.9988,-56.4903 -38.6523,-78.9852 -25.6737,-22.4949 -62.3418,-33.6715 -109.842,-33.6715 -45.496,0 -80.3418,8.98986 -104.497,26.9898 -24.1754,18.1822 -39.5027,44.0179 -46.3464,77.5071zm681.67 -468.829l0 75.1584 -186.661 0 0 60.1753 197.331 231.327 59.9931 0 0 -238.656 50.8413 0 0 -52.8458 -50.8413 0 0 -75.1584 -70.6635 0zm0 128.004l0 128.328 -111.827 -128.328 111.827 0z" + id="path591" /></glyph> + <glyph + unicode="½" + horiz-adv-x="833" + id="glyph593"><path + d="M111.341 -27.8402l537.65 755.836 76.677 0 -537.67 -755.836 -76.6567 0zm50.3351 385.673l0 270.668c-33.1855,-26.5039 -69.6714,-44.8278 -109.518,-55.3362l0 60.1753c20.3487,6.49942 42.6816,18.3239 67.5049,35.6557 24.6614,17.1698 44.6658,35.8379 60.0134,55.6804l52.8255 0 0 -366.843 -70.8255 0zm350.483 -372.998c2.00449,18.3239 9.84025,36.6681 23.5073,55.1742 20.1664,28.3261 53.6759,59.4869 100.508,93.3204 46.9943,33.8334 74.8345,55.8424 83.5004,65.8446 12.1687,13.3228 18.1619,26.9898 18.1619,41.001 0,15.6513 -5.66928,28.4881 -16.8459,38.3284 -11.3183,10.0022 -28.1642,15.0033 -50.6591,15.0033 -21.3408,0 -37.4982,-3.84701 -48.0066,-11.5005 -10.6501,-7.67377 -19.316,-22.1709 -26.1597,-43.6737l-73.6601 7.32957c9.33406,36.3441 25.8357,63.172 49.3227,80.3418 23.3453,16.9876 56.6725,25.4915 100.002,25.4915 49.1607,0 85.1607,-9.49604 108.162,-28.6704 23.0011,-19.316 34.5016,-42.6613 34.5016,-70.3193 0,-27.334 -9.65802,-53.3317 -28.8323,-77.6691 -14.6591,-18.3442 -47.8244,-46.3464 -99.6578,-84.0066 -27.334,-19.8222 -46.6703,-35.4937 -58.0089,-46.8323l188.342 0 0 -59.163 -304.177 0z" + id="path595" /></glyph> + <glyph + unicode="¼" + horiz-adv-x="833" + id="glyph597"><path + d="M123.003 -27.8402l538.156 755.836 76.1708 0 -537.67 -755.836 -76.6567 0zm38.6726 385.673l0 270.668c-33.1855,-26.5039 -69.6714,-44.8278 -109.518,-55.3362l0 60.1753c20.3487,6.49942 42.6816,18.3239 67.5049,35.6557 24.6614,17.1698 44.6658,35.8379 60.0134,55.6804l52.8255 0 0 -366.843 -70.8255 0zm536.496 -372.998l0 75.1584 -187.005 0 0 60.1753 197.838 231.327 59.4869 0 0 -238.656 50.8413 0 0 -52.8458 -50.8413 0 0 -75.1584 -70.3193 0zm0 128.004l0 128.328 -112.171 -128.328 112.171 0z" + id="path599" /></glyph> + <glyph + unicode="»" + horiz-adv-x="556" + id="glyph601"><path + d="M386.159 257.831l-127.316 222.661 72.1618 0 155.824 -222.661 -155.824 -222.661 -71.6759 0 126.83 222.661zm-188.827 0l-128.996 222.661 73.8221 0 153.172 -222.661 -153.172 -222.661 -73.8221 0 128.996 222.661z" + id="path603" /></glyph> + <glyph + unicode="º" + horiz-adv-x="365" + id="glyph605"><path + d="M182.166 727.996c47.1765,0 85.6668,-16.1574 115.491,-48.8368 29.6827,-32.4971 44.6861,-77.4869 44.6861,-134.666 0,-56.9965 -15.0033,-101.824 -45.01,-134.321 -29.8245,-32.4971 -68.1731,-48.8368 -114.661,-48.8368 -47.1765,0 -85.8288,15.9955 -115.836,47.8244 -29.8447,31.8492 -44.8278,76.3328 -44.8278,133.35 0,58.4948 14.8211,104.153 44.6658,136.65 29.8245,32.6793 68.3351,48.8368 115.491,48.8368zm0 -64.8323c-26.3419,0 -47.6624,-9.33406 -63.8401,-27.8402 -15.9955,-18.6479 -24.1552,-48.8165 -24.1552,-90.8299 0,-41.001 8.32169,-71.1697 24.6614,-90.1618 16.5017,-18.9921 37.4982,-28.5084 63.3339,-28.5084 25.9977,0 47.1765,9.51629 63.4959,28.5084 16.1777,18.9921 24.3374,49.8289 24.3374,92.5105 0,39.8267 -8.15971,68.983 -24.6614,87.9953 -16.3397,18.8301 -37.4982,28.3261 -63.172,28.3261z" + id="path607" /></glyph> + <glyph + unicode="¹" + horiz-adv-x="333" + id="glyph609"><path + d="M161.676 357.833l0 270.668c-33.1855,-26.5039 -69.6714,-44.8278 -109.518,-55.3362l0 60.1753c20.3487,6.49942 42.6816,18.3239 67.5049,35.6557 24.6614,17.1698 44.6658,35.8379 60.0134,55.6804l52.8255 0 0 -366.843 -70.8255 0z" + id="path611" /></glyph> + <glyph + unicode="¸" + horiz-adv-x="333" + id="glyph613"><path + d="M105.509 -75.1584l25.3295 86.335 65.5004 0 -16.1777 -52.1776c27.6782,-3.34082 48.5128,-11.8245 62.5038,-25.6737 14.0112,-13.829 20.9966,-29.1563 20.9966,-46.1641 0,-24.3374 -11.6625,-46.0021 -35.1698,-64.6703 -23.487,-18.6479 -58.6568,-27.9819 -105.995,-27.9819 -26.6659,0 -49.9909,1.82227 -70.3395,5.83126l5.5073 57.1585c20.8346,-1.33633 36.1619,-2.00449 45.8402,-2.00449 30.6546,0 52.1574,4.17097 64.488,12.6749 9.33406,6.49942 14.1732,14.4972 14.1732,23.9932 0,5.83126 -1.84252,10.9944 -5.66928,15.5095 -3.66478,4.65691 -10.6704,8.50392 -20.6726,11.8245 -10.1642,3.17885 -26.9898,5.00111 -50.3148,5.34532z" + id="path615" /></glyph> + <glyph + unicode="·" + horiz-adv-x="277" + id="glyph617"><path + d="M90.3238 302.173l0 100.164 100.184 0 0 -100.164 -100.184 0z" + id="path619" /></glyph> + <glyph + unicode="¶" + horiz-adv-x="537" + id="glyph621"><path + d="M197.838 -198.668l0 510.174c-61.0055,3.32058 -109.012,23.0011 -144.344,59.325 -35.3318,36.3441 -52.9875,82.6702 -52.9875,138.999 0,62.8278 19.6602,112.839 58.8188,150.013 39.1788,37.316 96.6814,55.9841 172.184,55.9841l308.996 0 0 -84.4925 -70.3395 0 0 -830.003 -82.9942 0 0 830.003 -108.83 0 0 -830.003 -80.5038 0z" + id="path623" /></glyph> + <glyph + unicode="µ" + horiz-adv-x="576" + id="glyph625"><path + d="M496.993 518.496l0 -518.496 -78.4993 0 0 61.4914c-16.9876,-25.9977 -33.6512,-43.9977 -50.3351,-53.6557 -22.8188,-13.3431 -49.3227,-20.0045 -79.6534,-20.0045 -27.0101,0 -50.8413,5.34532 -71.6759,15.9955 -15.6715,8.17996 -32.8211,24.3374 -51.8334,48.3306l0 -250.825 -86.821 0 0 717.164 86.821 0 0 -219.664c0,-79.8356 4.33295,-131.507 12.6749,-154.994 8.50392,-23.6692 22.3329,-42.3374 41.325,-56.0044 19.0123,-13.667 41.001,-20.4904 65.6624,-20.4904 26.0179,0 49.343,7.14734 69.8334,21.4825 20.5106,14.3352 35.0078,32.8413 43.5117,55.4982 8.32169,22.5151 12.6546,73.6804 12.6546,153.01l0 221.163 86.335 0z" + id="path627" /></glyph> + <glyph + unicode="´" + horiz-adv-x="333" + id="glyph629"><path + d="M108.324 583.004l65.0145 136.67 115.167 0 -107.332 -136.67 -72.8502 0z" + id="path631" /></glyph> + <glyph + unicode="³" + horiz-adv-x="333" + id="glyph633"><path + d="M16.1574 453.664l71.1697 7.32957c6.49942,-19.6602 15.0033,-33.0033 25.5118,-40.1506 13.991,-9.67827 30.4926,-14.5174 49.8289,-14.5174 23.0011,0 41.6692,6.33744 55.6602,19.0123 14.0112,12.6546 20.9966,28.0022 20.9966,45.8199 0,16.3397 -5.99324,29.3385 -17.6558,39.1788 -11.6625,9.65802 -31.667,14.4972 -59.9931,14.4972 -4.00899,0 -9.33406,-0.323959 -16.1777,-0.830144 -4.49493,-0.344206 -8.15971,-0.506186 -10.6704,-0.506186l10.6704 53.6759c26.3419,-0.344206 45.6782,4.33295 57.8266,14.1529 12.1687,9.67827 18.3442,21.6647 18.3442,35.676 0,12.0067 -4.83913,22.3329 -14.6591,30.6546 -9.67827,8.50392 -24.1754,12.6749 -43.5117,12.6749 -18.1619,0 -32.3351,-3.5028 -42.6613,-10.6704 -10.1642,-7.16759 -19.1743,-20.1664 -26.6659,-38.9965l-69.8334 11.1766c13.505,34.5016 30.3306,58.6568 50.6591,72.3238 20.3284,13.667 50.0111,20.5106 89.0077,20.5106 46.9943,0 80.9897,-8.84812 102.33,-26.1799 21.3408,-17.4938 31.9909,-39.1585 31.9909,-65.1562 0,-18 -5.83126,-33.8334 -17.3318,-47.8447 -11.5005,-13.991 -28.1642,-24.1552 -49.9909,-30.3306 28.9943,-7.16759 50.3351,-18.9921 64.0021,-35.3318 13.667,-16.5017 20.4904,-35.8379 20.4904,-58.0089 0,-30.1484 -12.9988,-56.4903 -38.6523,-78.9852 -25.6737,-22.4949 -62.3418,-33.6715 -109.842,-33.6715 -45.496,0 -80.3418,8.98986 -104.497,26.9898 -24.1754,18.1822 -39.5027,44.0179 -46.3464,77.5071z" + id="path635" /></glyph> + <glyph + unicode="²" + horiz-adv-x="333" + id="glyph637"><path + d="M12.1687 357.833c2.00449,18.6681 9.65802,37.1743 23.0011,55.6602 20.4904,28.0022 54.1619,59.001 100.994,93.1786 46.9943,33.9954 74.8345,55.8221 83.5004,65.6624 12.1687,13.3228 18.1619,26.9898 18.1619,41.001 0,15.4893 -5.66928,28.5084 -17.1496,38.4904 -11.3386,10.1845 -28.1844,15.1653 -50.3351,15.1653 -21.3408,0 -37.4982,-3.82676 -48.0066,-11.5005 -10.6704,-7.65353 -19.3363,-22.3329 -26.1597,-44.1596l-73.6804 7.83575c9.33406,36.1619 25.8357,62.6658 48.9988,79.8356 23.3453,17.0078 56.8345,25.6737 100.346,25.6737 49.1607,0 85.1607,-9.67827 108.162,-28.8323 23.0011,-19.1743 34.5016,-42.6816 34.5016,-70.3395 0,-27.334 -9.67827,-53.1697 -28.8323,-77.6691 -14.6794,-18.1619 -48.0066,-46.0021 -100.164,-83.5004 -27.0101,-19.8425 -46.1641,-35.676 -57.5027,-47.3385l188.321 0 0 -59.163 -304.157 0z" + id="path639" /></glyph> + <glyph + unicode="±" + horiz-adv-x="548" + id="glyph641"><path + d="M232.825 126.992l0 196.683 -194.659 0 0 81.6579 194.659 0 0 194.841 83.1764 0 0 -194.841 194.659 0 0 -81.6579 -194.659 0 0 -196.683 -83.1764 0zm277.835 -126.992l-472.494 0 0 82.0021 472.494 0 0 -82.0021z" + id="path643" /></glyph> + <glyph + unicode="°" + horiz-adv-x="399" + id="glyph645"><path + d="M62.5038 592.824c0,37.3362 13.3228,69.3474 39.8267,95.6691 26.5039,26.3419 58.3328,39.5027 95.5071,39.5027 37.6602,0 69.6714,-13.1608 96.155,-39.5027 26.3419,-26.3217 39.5027,-58.3328 39.5027,-95.6691 0,-37.4982 -13.3228,-69.4892 -39.8267,-95.993 -26.5039,-26.5039 -58.4948,-39.8267 -95.8311,-39.8267 -37.1743,0 -69.0032,13.1608 -95.5071,39.5027 -26.5039,26.4836 -39.8267,58.4948 -39.8267,96.317zm53.1697 0c0,-22.8188 8.15971,-42.3171 24.1552,-58.3328 16.1777,-16.1574 35.676,-24.1552 58.3328,-24.1552 22.5151,0 41.8312,7.99773 58.0089,24.1552 15.9955,16.0157 24.1552,35.514 24.1552,58.3328 0,22.6771 -8.15971,42.1754 -24.1552,58.3328 -16.1777,16.0157 -35.4937,24.1754 -58.0089,24.1754 -22.6569,0 -42.1551,-8.15971 -58.3328,-24.1754 -15.9955,-16.1574 -24.1552,-35.6557 -24.1552,-58.3328z" + id="path647" /></glyph> + <glyph + unicode="Ï" + horiz-adv-x="277" + id="glyph649"><path + d="M93.3406 0l0 715.827 94.6567 0 0 -715.827 -94.6567 0zm-91.3361 759.825l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path651" /></glyph> + <glyph + unicode="Î" + horiz-adv-x="277" + id="glyph653"><path + d="M93.3406 0l0 715.827 94.6567 0 0 -715.827 -94.6567 0zm46.8323 842.839l-55.1742 -83.0144 -100.67 0 105.509 136.67 93.8266 0 109.842 -136.67 -99.6781 0 -53.6557 83.0144z" + id="path655" /></glyph> + <glyph + unicode="Í" + horiz-adv-x="277" + id="glyph657"><path + d="M93.3406 0l0 715.827 94.6567 0 0 -715.827 -94.6567 0zm-24.4994 759.825l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path659" /></glyph> + <glyph + unicode="Ì" + horiz-adv-x="277" + id="glyph661"><path + d="M93.3406 0l0 715.827 94.6567 0 0 -715.827 -94.6567 0zm116.483 759.825l-70.6635 0 -112.819 136.67 117.658 0 65.8244 -136.67z" + id="path663" /></glyph> + <glyph + unicode="Ë" + horiz-adv-x="666" + id="glyph665"><path + d="M79.1674 0l0 715.827 517.504 0 0 -84.4925 -422.847 0 0 -219.178 395.999 0 0 -83.9863 -395.999 0 0 -243.678 439.511 0 0 -84.4925 -534.168 0zm128.328 759.825l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path667" /></glyph> + <glyph + unicode="Ê" + horiz-adv-x="666" + id="glyph669"><path + d="M79.1674 0l0 715.827 517.504 0 0 -84.4925 -422.847 0 0 -219.178 395.999 0 0 -83.9863 -395.999 0 0 -243.678 439.511 0 0 -84.4925 -534.168 0zm265.99 842.839l-55.154 -83.0144 -100.67 0 105.509 136.67 93.8266 0 109.822 -136.67 -99.6578 0 -53.6759 83.0144z" + id="path671" /></glyph> + <glyph + unicode="É" + horiz-adv-x="666" + id="glyph673"><path + d="M79.1674 0l0 715.827 517.504 0 0 -84.4925 -422.847 0 0 -219.178 395.999 0 0 -83.9863 -395.999 0 0 -243.678 439.511 0 0 -84.4925 -534.168 0zm195.165 759.825l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path675" /></glyph> + <glyph + unicode="È" + horiz-adv-x="666" + id="glyph677"><path + d="M79.1674 0l0 715.827 517.504 0 0 -84.4925 -422.847 0 0 -219.178 395.999 0 0 -83.9863 -395.999 0 0 -243.678 439.511 0 0 -84.4925 -534.168 0zm335.824 759.825l-70.6635 0 -112.819 136.67 117.658 0 65.8244 -136.67z" + id="path679" /></glyph> + <glyph + unicode="Ç" + horiz-adv-x="722" + id="glyph681"><path + d="M587.843 251.007l94.8187 -24.0134c-19.8222,-77.6691 -55.6602,-136.994 -107.17,-177.995 -51.6512,-40.8391 -114.661,-61.1675 -189.334,-61.1675 -77.1629,0 -139.829,15.6715 -188.159,46.9943 -48.3306,31.505 -85.1607,77.001 -110.328,136.508 -25.1675,59.6692 -37.8424,123.671 -37.8424,192.006 0,74.4903 14.1732,139.485 42.6613,195.003 28.5084,55.4982 69.0032,97.6533 121.667,126.486 52.5016,28.8323 110.348,43.1675 173.5,43.1675 71.6759,0 131.851,-18.1619 180.668,-54.668 48.8368,-36.4859 82.8322,-87.6713 102.007,-153.82l-93.1584 -22.0089c-16.6636,52.1574 -40.6771,89.9998 -72.344,113.831 -31.505,23.8312 -71.1697,35.676 -119.156,35.676 -55.0122,0 -100.832,-13.1811 -137.844,-39.5027 -36.992,-26.5039 -62.9897,-61.8356 -77.8311,-106.339 -15.0033,-44.3216 -22.4949,-90.1618 -22.4949,-137.338 0,-60.9852 8.82788,-113.993 26.5039,-159.489 17.8177,-45.334 45.334,-79.3294 82.8322,-101.845 37.4982,-22.4949 77.9931,-33.6512 121.667,-33.6512 52.9875,0 97.8356,15.3273 134.666,45.8199 36.8301,30.6748 61.6534,76.1708 74.6725,136.346zm-285.003 -326.166l25.3295 86.335 65.5004 0 -16.1777 -52.1776c27.6782,-3.34082 48.5128,-11.8245 62.5038,-25.6737 14.0112,-13.829 20.9966,-29.1563 20.9966,-46.1641 0,-24.3374 -11.6625,-46.0021 -35.1698,-64.6703 -23.487,-18.6479 -58.6568,-27.9819 -105.995,-27.9819 -26.6659,0 -49.9909,1.82227 -70.3193,5.83126l5.48705 57.1585c20.8346,-1.33633 36.1619,-2.00449 45.8402,-2.00449 30.6546,0 52.1574,4.17097 64.488,12.6749 9.33406,6.49942 14.1732,14.4972 14.1732,23.9932 0,5.83126 -1.82227,10.9944 -5.66928,15.5095 -3.66478,4.65691 -10.6704,8.50392 -20.6524,11.8245 -10.1845,3.17885 -27.0101,5.00111 -50.3351,5.34532z" + id="path683" /></glyph> + <glyph + unicode="Æ" + horiz-adv-x="1000" + id="glyph685"><path + d="M0.506186 0l344.166 715.827 587.499 0 0 -84.4925 -359.837 0 0 -220.17 334.325 0 0 -84.0066 -334.325 0 0 -242.665 372.998 0 0 -84.4925 -468.323 0 0 206.503 -276.337 0 -97.6736 -206.503 -102.492 0zm240.155 290.51l236.348 0 0 340.825 -70.6838 0 -165.664 -340.825z" + id="path687" /></glyph> + <glyph + unicode="Å" + horiz-adv-x="666" + id="glyph689"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm29.9864 487.841c0,23.8312 8.6659,44.3419 26.0179,61.4914 17.4938,17.3318 37.9842,25.8357 61.8154,25.8357 24.0134,0 44.848,-8.6659 62.0179,-25.9977 17.3318,-17.4938 25.8155,-38.4904 25.8155,-63.3339 0,-25.0056 -8.48367,-46.1641 -25.8155,-63.4959 -17.1698,-17.1698 -37.8424,-25.8357 -61.5117,-25.8357 -24.4994,0 -45.334,8.6659 -62.5038,26.1597 -17.3318,17.352 -25.8357,39.1788 -25.8357,65.1765zm37.0123 -0.506186c0,-15.3273 5.16309,-28.1642 15.4893,-38.4904 10.1642,-10.5084 22.3329,-15.6715 36.3441,-15.6715 13.991,0 26.1597,5.16309 36.3239,15.6715 10.3464,10.3262 15.3475,22.8391 15.3475,37.4982 0,14.6591 -5.00111,27.172 -15.0033,37.6602 -10.1642,10.3464 -22.3329,15.5095 -36.6681,15.5095 -14.0112,0 -26.1799,-5.00111 -36.3441,-15.3475 -10.3262,-10.1642 -15.4893,-22.4949 -15.4893,-36.8301z" + id="path691" /></glyph> + <glyph + unicode="Ä" + horiz-adv-x="666" + id="glyph693"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm-19.8425 465.832l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path695" /></glyph> + <glyph + unicode="Ã" + horiz-adv-x="666" + id="glyph697"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm-34.5016 465.67c-0.344206,33.8334 8.82788,61.0055 27.82,81.1719 18.5061,20.1664 42.1754,30.1687 71.1697,30.1687 20.1664,0 47.6827,-8.6659 82.5083,-26.3419 19.3363,-9.82 34.5016,-14.6591 46.0021,-14.6591 10.3262,0 18.3239,2.83464 23.8312,8.50392 5.66928,5.83126 9.49604,16.9876 11.8245,33.9954l63.3339 0c-0.830144,-37.1743 -10.3262,-64.9942 -28.0022,-83.5004 -17.6558,-18.5061 -40.3329,-27.8402 -67.6669,-27.8402 -20.4904,0 -47.5005,9.17208 -80.9897,27.334 -21.8267,11.6625 -37.8424,17.676 -47.8244,17.676 -11.1766,0 -20.0045,-4.00899 -26.8481,-11.8447 -7.16759,-7.83575 -10.6704,-19.3363 -10.3262,-34.6636l-64.8323 0z" + id="path699" /></glyph> + <glyph + unicode="Â" + horiz-adv-x="666" + id="glyph701"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm119.318 548.847l-55.154 -83.0144 -100.67 0 105.509 136.67 93.8266 0 109.822 -136.67 -99.6578 0 -53.6759 83.0144z" + id="path703" /></glyph> + <glyph + unicode="Á" + horiz-adv-x="666" + id="glyph705"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm59.163 465.832l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path707" /></glyph> + <glyph + unicode="À" + horiz-adv-x="666" + id="glyph709"><path + d="M-1.49831 0l275.001 715.827 102.007 0 293 -715.827 -108 0 -83.5004 216.83 -299.338 0 -78.4993 -216.83 -100.67 0zm206.503 293.993l242.827 0 -74.8345 198.182c-22.6569,60.1551 -39.6647,109.66 -50.6591,148.495 -9.17208,-46.0021 -22.0089,-91.4981 -38.6726,-136.832l-78.6612 -209.844zm197.331 465.832l-70.6635 0 -112.839 136.67 117.658 0 65.8446 -136.67z" + id="path711" /></glyph> + <glyph + unicode="ß" + horiz-adv-x="610" + id="glyph713"><path + d="M74.6725 0l0 487.841c0,59.4869 7.32957,105.327 21.8267,137.318 14.4972,32.1732 38.6726,57.3407 72.506,75.5026 33.8334,18.1619 71.8379,27.334 114.155,27.334 56.3486,0 100.67,-13.991 132.843,-42.1551 32.1732,-28.1844 48.3306,-60.8435 48.3306,-97.9975 0,-16.5017 -2.83464,-33.6715 -8.82788,-51.1855 -5.83126,-17.6558 -16.1777,-39.4825 -31.181,-65.6624 -14.9831,-26.3217 -24.4994,-44.5038 -28.3261,-54.668 -3.82676,-10.3262 -5.83126,-19.3363 -5.83126,-27.1518 0,-10.5084 3.5028,-20.6726 10.6704,-30.8368 6.82338,-10.3464 26.5039,-26.1799 59.163,-47.3385 44.1596,-28.9943 73.6601,-52.1574 88.3395,-69.8334 20.8346,-25.0056 31.3228,-54.668 31.3228,-88.8254 0,-45.172 -16.8256,-84.0066 -50.1731,-116.18 -33.3273,-32.3351 -75.9886,-48.3306 -128.166,-48.3306 -40.9808,0 -77.001,10.9944 -107.818,33.0033 -30.9988,21.8267 -53.9999,50.1731 -69.3474,84.6747l75.6646 35.1495c16.1777,-30.3306 32.5174,-51.3272 48.8368,-62.9897 16.1777,-11.6625 33.3475,-17.676 51.1652,-17.676 24.8436,0 46.0021,8.50392 63.5162,25.5118 17.6558,16.8256 26.3217,36.6681 26.3217,59.4869 0,18.3442 -5.16309,33.8334 -15.4893,46.8323 -6.84363,8.50392 -25.1675,22.8391 -54.668,43.0055 -54.1821,37.1743 -87.5094,64.9942 -100.164,83.5004 -13.0191,18.5061 -19.5185,37.6602 -19.5185,57.1787 0,12.6546 2.16647,25.4915 6.49942,38.4904 4.51518,13.1608 15.0033,33.9954 31.8492,62.5038 16.6636,28.6704 27.658,50.1731 33.0033,64.488 5.16309,14.3352 7.65353,27.0101 7.65353,38.1664 0,20.1664 -8.82788,38.0044 -26.5039,53.352 -17.8177,15.4893 -41.487,23.325 -70.9875,23.325 -34.8458,0 -63.3339,-10.8324 -85.5049,-32.3351 -22.1709,-21.5028 -33.1653,-67.9908 -33.1653,-139.667l0 -483.832 -87.9953 0z" + id="path715" /></glyph> + <glyph + unicode="Þ" + horiz-adv-x="666" + id="glyph717"><path + d="M77.1629 0l0 715.827 94.677 0 0 -145.498 175.322 0c47.5005,0 84.0066,-2.32845 109.336,-6.82338 35.1698,-6.17546 64.6703,-17.514 88.5015,-34.0157 23.6692,-16.3194 42.6613,-39.4825 56.9965,-68.983 14.3352,-29.6827 21.5028,-62.1798 21.5028,-97.6736 0,-60.6613 -19.3363,-112.009 -58.0089,-154.164 -38.8143,-41.9932 -108.83,-63.172 -209.986,-63.172l-183.664 0 0 -145.498 -94.677 0zm94.677 229.99l185.163 0c61.1675,0 104.659,11.3386 130.333,34.1777 25.6737,22.8391 38.4904,54.668 38.4904,95.6691 0,29.6625 -7.49155,55.154 -22.3329,76.6567 -14.9831,21.5028 -34.8256,35.676 -59.6692,42.4993 -15.9955,4.51518 -45.496,6.84363 -88.8254,6.84363l-183.158 0 0 -255.846z" + id="path719" /></glyph> + <glyph + unicode="Ý" + horiz-adv-x="666" + id="glyph721"><path + d="M278.827 0l0 303.165 -275.831 412.663 115.167 0 141.165 -215.817c25.9977,-40.3531 50.1731,-80.686 72.668,-121.181 21.5028,37.4982 47.5005,79.6736 78.1753,126.506l138.654 210.492 110.348 0 -285.671 -412.663 0 -303.165 -94.677 0zm-7.83575 759.825l65.0145 136.67 115.167 0 -107.332 -136.67 -72.8502 0z" + id="path723" /></glyph> + <glyph + unicode="Ü" + horiz-adv-x="722" + id="glyph725"><path + d="M546.842 715.827l94.8187 0 0 -413.655c0,-71.8379 -8.15971,-128.996 -24.4994,-171.334 -16.3194,-42.3374 -45.6579,-76.677 -88.1573,-103.181 -42.4993,-26.6659 -98.1798,-39.8267 -167.163,-39.8267 -66.9987,0 -122.011,11.5005 -164.51,34.6636 -42.6613,23.0011 -73.1742,56.5106 -91.3361,100.346 -18.3239,43.8357 -27.334,103.485 -27.334,179.331l0 413.655 94.677 0 0 -413.169c0,-62.1596 5.83126,-108 17.3318,-137.318 11.5005,-29.5005 31.505,-52.1776 59.4869,-68.1731 28.1844,-15.9955 62.686,-23.9932 103.343,-23.9932 69.6714,0 119.338,15.8335 149.001,47.5005 29.5005,31.4847 44.3419,92.1663 44.3419,181.984l0 413.169zm-325.174 43.9977l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path727" /></glyph> + <glyph + unicode="Û" + horiz-adv-x="722" + id="glyph729"><path + d="M546.842 715.827l94.8187 0 0 -413.655c0,-71.8379 -8.15971,-128.996 -24.4994,-171.334 -16.3194,-42.3374 -45.6579,-76.677 -88.1573,-103.181 -42.4993,-26.6659 -98.1798,-39.8267 -167.163,-39.8267 -66.9987,0 -122.011,11.5005 -164.51,34.6636 -42.6613,23.0011 -73.1742,56.5106 -91.3361,100.346 -18.3239,43.8357 -27.334,103.485 -27.334,179.331l0 413.655 94.677 0 0 -413.169c0,-62.1596 5.83126,-108 17.3318,-137.318 11.5005,-29.5005 31.505,-52.1776 59.4869,-68.1731 28.1844,-15.9955 62.686,-23.9932 103.343,-23.9932 69.6714,0 119.338,15.8335 149.001,47.5005 29.5005,31.4847 44.3419,92.1663 44.3419,181.984l0 413.169zm-187.511 127.012l-55.1742 -83.0144 -100.65 0 105.489 136.67 93.8468 0 109.822 -136.67 -99.6578 0 -53.6759 83.0144z" + id="path731" /></glyph> + <glyph + unicode="Ú" + horiz-adv-x="722" + id="glyph733"><path + d="M546.842 715.827l94.8187 0 0 -413.655c0,-71.8379 -8.15971,-128.996 -24.4994,-171.334 -16.3194,-42.3374 -45.6579,-76.677 -88.1573,-103.181 -42.4993,-26.6659 -98.1798,-39.8267 -167.163,-39.8267 -66.9987,0 -122.011,11.5005 -164.51,34.6636 -42.6613,23.0011 -73.1742,56.5106 -91.3361,100.346 -18.3239,43.8357 -27.334,103.485 -27.334,179.331l0 413.655 94.677 0 0 -413.169c0,-62.1596 5.83126,-108 17.3318,-137.318 11.5005,-29.5005 31.505,-52.1776 59.4869,-68.1731 28.1844,-15.9955 62.686,-23.9932 103.343,-23.9932 69.6714,0 119.338,15.8335 149.001,47.5005 29.5005,31.4847 44.3419,92.1663 44.3419,181.984l0 413.169zm-247.181 43.9977l65.0145 136.67 115.147 0 -107.332 -136.67 -72.83 0z" + id="path735" /></glyph> + <glyph + unicode="Ù" + horiz-adv-x="722" + id="glyph737"><path + d="M546.842 715.827l94.8187 0 0 -413.655c0,-71.8379 -8.15971,-128.996 -24.4994,-171.334 -16.3194,-42.3374 -45.6579,-76.677 -88.1573,-103.181 -42.4993,-26.6659 -98.1798,-39.8267 -167.163,-39.8267 -66.9987,0 -122.011,11.5005 -164.51,34.6636 -42.6613,23.0011 -73.1742,56.5106 -91.3361,100.346 -18.3239,43.8357 -27.334,103.485 -27.334,179.331l0 413.655 94.677 0 0 -413.169c0,-62.1596 5.83126,-108 17.3318,-137.318 11.5005,-29.5005 31.505,-52.1776 59.4869,-68.1731 28.1844,-15.9955 62.686,-23.9932 103.343,-23.9932 69.6714,0 119.338,15.8335 149.001,47.5005 29.5005,31.4847 44.3419,92.1663 44.3419,181.984l0 413.169zm-129.847 43.9977l-70.6635 0 -112.839 136.67 117.678 0 65.8244 -136.67z" + id="path739" /></glyph> + <glyph + unicode="Ø" + horiz-adv-x="777" + id="glyph741"><path + d="M610.338 650.327l82.0021 91.8423 48.3306 -41.001 -85.8288 -96.6612c27.9819,-41.6692 46.8323,-78.1753 56.6523,-109.336 12.9988,-41.001 19.4983,-87.0032 19.4983,-137.662 0,-73.3362 -14.8211,-138.675 -44.4836,-195.833 -29.6827,-57.3407 -71.1697,-100.67 -124.684,-130.009 -53.6557,-29.1765 -110.49,-43.8357 -170.666,-43.8357 -44.9898,0 -85.6668,6.33744 -122.153,18.9921 -28.0022,9.84025 -60.6815,28.5084 -98.1798,56.1866l-82.0021 -91.8423 -48.3306 41.001 86.0111 96.155c-32.0112,48.5128 -53.3317,89.9998 -64.0021,124.339 -10.6704,34.3396 -16.1777,75.6646 -16.1777,123.833 0,73.4981 14.6794,138.999 43.9977,196.501 29.3385,57.5027 70.3395,100.994 123.347,130.677 52.8255,29.5005 111.665,44.3216 176.497,44.3216 43.6737,0 81.8401,-5.66928 114.499,-17.3318 32.6591,-11.5005 67.9908,-31.667 105.671,-60.3373zm-58.5151 -65.8244c-30.6546,23.9932 -57.4824,40.4948 -80.3215,49.3227 -23.0011,8.6659 -50.0111,13.1811 -80.8277,13.1811 -71.3317,0 -130.171,-24.1754 -176.841,-72.506 -46.5083,-48.3306 -69.8334,-120.492 -69.8334,-216.668 0,-37.6602 3.66478,-71.1697 10.8324,-100.508 5.16309,-21.8267 15.9955,-48.6546 32.6591,-80.4835l364.332 407.662zm40.0089 -50.3351l-362.834 -406.163c25.0056,-20.5106 48.1686,-34.8458 69.3272,-43.0055 27.6782,-10.8324 57.6647,-16.1574 89.8378,-16.1574 71.0077,0 129.503,24.9853 175.829,75.1584 46.1844,50.1731 69.3474,120.492 69.3474,210.998 0,67.6669 -13.8492,127.498 -41.5072,179.169z" + id="path743" /></glyph> + <glyph + unicode="×" + horiz-adv-x="583" + id="glyph745"><path + d="M78.6612 199.66l153.84 153.84 -153.334 153.334 59.5072 59.5072 153.334 -153.172 152.828 152.828 58.6568 -59.163 -152.483 -152.828 153.334 -153.334 -59.5072 -59.5072 -153.334 153.334 -153.84 -153.84 -59.001 59.001z" + id="path747" /></glyph> + <glyph + unicode="Ö" + horiz-adv-x="777" + id="glyph749"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679zm105.995 412.663l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path751" /></glyph> + <glyph + unicode="Õ" + horiz-adv-x="777" + id="glyph753"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679zm81.6579 412.501c-0.323959,33.8334 8.82788,61.0055 27.8402,81.1719 18.5061,20.1664 42.1551,30.1687 71.1697,30.1687 20.1664,0 47.6624,-8.6659 82.488,-26.3419 19.3363,-9.82 34.5016,-14.6591 46.0021,-14.6591 10.3464,0 18.3442,2.83464 23.8312,8.50392 5.66928,5.83126 9.51629,16.9876 11.8447,33.9954l63.3339 0c-0.830144,-37.1743 -10.3464,-64.9942 -28.0022,-83.5004 -17.676,-18.5061 -40.3329,-27.8402 -67.6669,-27.8402 -20.5106,0 -47.5005,9.17208 -81.0099,27.334 -21.8267,11.6625 -37.8222,17.676 -47.8244,17.676 -11.1766,0 -20.0045,-4.00899 -26.8278,-11.8447 -7.16759,-7.83575 -10.6704,-19.3363 -10.3464,-34.6636l-64.8323 0z" + id="path755" /></glyph> + <glyph + unicode="Ô" + horiz-adv-x="777" + id="glyph757"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679zm243.657 495.677l-55.154 -83.0144 -100.67 0 105.489 136.67 93.8468 0 109.822 -136.67 -99.6578 0 -53.6759 83.0144z" + id="path759" /></glyph> + <glyph + unicode="Ó" + horiz-adv-x="777" + id="glyph761"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679zm184.495 412.663l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path763" /></glyph> + <glyph + unicode="Ò" + horiz-adv-x="777" + id="glyph765"><path + d="M48.3306 348.661c0,118.832 31.8289,211.849 95.6691,279.009 63.8401,67.1607 146.166,100.832 247.16,100.832 66.0066,0 125.676,-15.8335 178.663,-47.3385 53.0078,-31.667 93.5026,-75.6646 121.343,-132.155 27.8402,-56.3486 41.6692,-120.513 41.6692,-192.006 0,-72.668 -14.4972,-137.662 -43.8357,-194.841 -29.3385,-57.3205 -70.8255,-100.67 -124.501,-130.171 -53.8379,-29.5005 -111.665,-44.1596 -173.824,-44.1596 -67.5049,0 -127.68,16.1777 -180.668,48.8368 -53.1697,32.4971 -93.3406,77.001 -120.675,133.329 -27.334,56.1664 -41.001,115.836 -41.001,178.663zm97.6736 -1.49831c0,-86.335 23.1631,-154.164 69.4892,-203.831 46.5083,-49.6669 104.679,-74.4903 174.675,-74.4903 71.3317,0 130.009,24.9853 175.991,75.1584 46.0021,50.1731 69.1652,121.343 69.1652,213.509 0,58.1506 -9.98198,108.992 -29.6625,152.483 -19.6602,43.5117 -48.4926,77.1832 -86.335,101.176 -37.9842,23.8312 -80.4835,35.8379 -127.66,35.8379 -67.1607,0 -124.825,-23.0011 -173.176,-69.1652 -48.3306,-46.0021 -72.4858,-123.003 -72.4858,-230.679zm301.16 412.663l-70.6635 0 -112.839 136.67 117.678 0 65.8244 -136.67z" + id="path767" /></glyph> + <glyph + unicode="Ñ" + horiz-adv-x="722" + id="glyph769"><path + d="M76.1708 0l0 715.827 97.1674 0 375.995 -561.987 0 561.987 90.8299 0 0 -715.827 -97.1674 0 -375.995 562.494 0 -562.494 -90.8299 0zm133.835 759.663c-0.344206,33.8334 8.82788,61.0055 27.82,81.1719 18.5061,20.1664 42.1754,30.1687 71.1697,30.1687 20.1664,0 47.6624,-8.6659 82.5083,-26.3419 19.3363,-9.82 34.5016,-14.6591 46.0021,-14.6591 10.3262,0 18.3239,2.83464 23.8312,8.50392 5.66928,5.83126 9.49604,16.9876 11.8245,33.9954l63.3339 0c-0.830144,-37.1743 -10.3262,-64.9942 -28.0022,-83.5004 -17.6558,-18.5061 -40.3329,-27.8402 -67.6669,-27.8402 -20.4904,0 -47.5005,9.17208 -80.9897,27.334 -21.847,11.6625 -37.8424,17.676 -47.8447,17.676 -11.1563,0 -19.9842,-4.00899 -26.8278,-11.8447 -7.16759,-7.83575 -10.6704,-19.3363 -10.3262,-34.6636l-64.8323 0z" + id="path771" /></glyph> + <glyph + unicode="Ð" + horiz-adv-x="722" + id="glyph773"><path + d="M77.1629 0l0 325.66 -78.6612 0 0 64.5083 78.6612 0 0 325.66 246.998 0c55.3362,0 97.6736,-3.5028 127.012,-10.3262 41.001,-9.33406 75.9886,-26.5039 105.003,-51.1652 37.6602,-32.0112 65.9864,-72.668 84.6545,-122.335 18.8301,-49.6669 28.1642,-106.339 28.1642,-170.159 0,-73.0122 -11.6625,-135.678 -34.6636,-188.18 -23.1631,-52.6635 -50.8413,-90.8299 -82.9942,-114.661 -32.3351,-23.6692 -69.3474,-40.6771 -111.341,-50.6591 -23.1631,-5.5073 -57.9886,-8.34194 -104.497,-8.34194l-258.337 0zm94.677 84.4925l152.828 0c47.5005,0 84.6747,4.33295 111.341,13.1811 26.6659,8.82788 47.8244,20.9966 63.4959,36.6681 22.4949,22.3329 39.9887,52.5016 52.6635,90.3238 12.8369,37.6602 19.1743,83.8446 19.1743,138.168 0,56.0044 -6.33744,100.67 -18.8504,134.159 -12.4927,33.6715 -28.8323,60.4993 -48.9988,80.6657 -20.3284,20.1664 -42.6613,34.1777 -67.4847,42.0134 -24.6816,7.83575 -62.6658,11.6625 -113.669,11.6625l-150.499 0 0 -241.167 197.331 0 0 -64.5083 -197.331 0 0 -241.167z" + id="path775" /></glyph> + <glyph + unicode="ï" + horiz-adv-x="277" + id="glyph777"><path + d="M96.6612 0l0 518.496 87.8333 0 0 -518.496 -87.8333 0zm-92.1663 620.158l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path779" /></glyph> + <glyph + unicode="î" + horiz-adv-x="277" + id="glyph781"><path + d="M96.6612 0l0 518.496 87.8333 0 0 -518.496 -87.8333 0zm50.8413 665.999l-55.1742 -82.9942 -100.67 0 105.509 136.67 93.8266 0 109.842 -136.67 -99.6781 0 -53.6557 82.9942z" + id="path783" /></glyph> + <glyph + unicode="í" + horiz-adv-x="277" + id="glyph785"><path + d="M96.6612 0l0 518.496 87.8333 0 0 -518.496 -87.8333 0zm-4.49493 583.004l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path787" /></glyph> + <glyph + unicode="ì" + horiz-adv-x="277" + id="glyph789"><path + d="M96.6612 0l0 518.496 87.8333 0 0 -518.496 -87.8333 0zm104.011 583.004l-70.6635 0 -112.839 136.67 117.658 0 65.8446 -136.67z" + id="path791" /></glyph> + <glyph + unicode="ë" + horiz-adv-x="556" + id="glyph793"><path + d="M420.843 167.001l90.8299 -11.1766c-14.3352,-53.1495 -40.8391,-94.3327 -79.5116,-123.651 -38.8346,-29.1765 -88.3193,-43.8357 -148.495,-43.8357 -75.8266,0 -136.002,23.325 -180.324,69.9953 -44.5038,46.6703 -66.6748,112.171 -66.6748,196.501 0,87.3271 22.4949,154.994 67.3227,203.163 45.01,48.1686 103.181,72.344 174.837,72.344 69.3474,0 126,-23.6692 169.835,-70.8457 43.9977,-47.1562 66.0066,-113.669 66.0066,-199.154 0,-5.34532 -0.161979,-13.1811 -0.506186,-23.5073l-386.665 0c3.1586,-56.9965 19.3363,-100.67 48.3306,-130.839 29.0146,-30.3306 65.0145,-45.496 108.344,-45.496 32.1529,0 59.6692,8.50392 82.488,25.4915 22.8391,16.8459 40.8391,43.8357 54.1821,81.0099zm-288.506 142.157l289.498 0c-3.82676,43.5117 -15.0033,76.3328 -33.1653,98.0178 -28.0022,33.8334 -64.3463,50.821 -108.83,50.821 -40.3329,0 -74.3485,-13.505 -101.845,-40.4948 -27.496,-27.0101 -42.6613,-63.172 -45.6579,-108.344zm6.33744 311l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm181.984 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path795" /></glyph> + <glyph + unicode="ê" + horiz-adv-x="556" + id="glyph797"><path + d="M420.843 167.001l90.8299 -11.1766c-14.3352,-53.1495 -40.8391,-94.3327 -79.5116,-123.651 -38.8346,-29.1765 -88.3193,-43.8357 -148.495,-43.8357 -75.8266,0 -136.002,23.325 -180.324,69.9953 -44.5038,46.6703 -66.6748,112.171 -66.6748,196.501 0,87.3271 22.4949,154.994 67.3227,203.163 45.01,48.1686 103.181,72.344 174.837,72.344 69.3474,0 126,-23.6692 169.835,-70.8457 43.9977,-47.1562 66.0066,-113.669 66.0066,-199.154 0,-5.34532 -0.161979,-13.1811 -0.506186,-23.5073l-386.665 0c3.1586,-56.9965 19.3363,-100.67 48.3306,-130.839 29.0146,-30.3306 65.0145,-45.496 108.344,-45.496 32.1529,0 59.6692,8.50392 82.488,25.4915 22.8391,16.8459 40.8391,43.8357 54.1821,81.0099zm-288.506 142.157l289.498 0c-3.82676,43.5117 -15.0033,76.3328 -33.1653,98.0178 -28.0022,33.8334 -64.3463,50.821 -108.83,50.821 -40.3329,0 -74.3485,-13.505 -101.845,-40.4948 -27.496,-27.0101 -42.6613,-63.172 -45.6579,-108.344zm144.506 356.841l-55.1742 -82.9942 -100.67 0 105.509 136.67 93.8266 0 109.842 -136.67 -99.6781 0 -53.6557 82.9942z" + id="path799" /></glyph> + <glyph + unicode="é" + horiz-adv-x="556" + id="glyph801"><path + d="M420.843 167.001l90.8299 -11.1766c-14.3352,-53.1495 -40.8391,-94.3327 -79.5116,-123.651 -38.8346,-29.1765 -88.3193,-43.8357 -148.495,-43.8357 -75.8266,0 -136.002,23.325 -180.324,69.9953 -44.5038,46.6703 -66.6748,112.171 -66.6748,196.501 0,87.3271 22.4949,154.994 67.3227,203.163 45.01,48.1686 103.181,72.344 174.837,72.344 69.3474,0 126,-23.6692 169.835,-70.8457 43.9977,-47.1562 66.0066,-113.669 66.0066,-199.154 0,-5.34532 -0.161979,-13.1811 -0.506186,-23.5073l-386.665 0c3.1586,-56.9965 19.3363,-100.67 48.3306,-130.839 29.0146,-30.3306 65.0145,-45.496 108.344,-45.496 32.1529,0 59.6692,8.50392 82.488,25.4915 22.8391,16.8459 40.8391,43.8357 54.1821,81.0099zm-288.506 142.157l289.498 0c-3.82676,43.5117 -15.0033,76.3328 -33.1653,98.0178 -28.0022,33.8334 -64.3463,50.821 -108.83,50.821 -40.3329,0 -74.3485,-13.505 -101.845,-40.4948 -27.496,-27.0101 -42.6613,-63.172 -45.6579,-108.344zm94.6567 273.846l65.0145 136.67 115.167 0 -107.352 -136.67 -72.83 0z" + id="path803" /></glyph> + <glyph + unicode="è" + horiz-adv-x="556" + id="glyph805"><path + d="M420.843 167.001l90.8299 -11.1766c-14.3352,-53.1495 -40.8391,-94.3327 -79.5116,-123.651 -38.8346,-29.1765 -88.3193,-43.8357 -148.495,-43.8357 -75.8266,0 -136.002,23.325 -180.324,69.9953 -44.5038,46.6703 -66.6748,112.171 -66.6748,196.501 0,87.3271 22.4949,154.994 67.3227,203.163 45.01,48.1686 103.181,72.344 174.837,72.344 69.3474,0 126,-23.6692 169.835,-70.8457 43.9977,-47.1562 66.0066,-113.669 66.0066,-199.154 0,-5.34532 -0.161979,-13.1811 -0.506186,-23.5073l-386.665 0c3.1586,-56.9965 19.3363,-100.67 48.3306,-130.839 29.0146,-30.3306 65.0145,-45.496 108.344,-45.496 32.1529,0 59.6692,8.50392 82.488,25.4915 22.8391,16.8459 40.8391,43.8357 54.1821,81.0099zm-288.506 142.157l289.498 0c-3.82676,43.5117 -15.0033,76.3328 -33.1653,98.0178 -28.0022,33.8334 -64.3463,50.821 -108.83,50.821 -40.3329,0 -74.3485,-13.505 -101.845,-40.4948 -27.496,-27.0101 -42.6613,-63.172 -45.6579,-108.344zm202.494 273.846l-70.6635 0 -112.839 136.67 117.678 0 65.8244 -136.67z" + id="path807" /></glyph> + <glyph + unicode="ç" + horiz-adv-x="500" + id="glyph809"><path + d="M404.341 190.002l86.335 -11.3386c-9.33406,-59.4869 -33.5095,-106.157 -72.506,-139.829 -38.8346,-33.6715 -86.6792,-50.4971 -143.332,-50.4971 -70.8457,0 -128.004,23.1631 -171.01,69.4892 -43.1675,46.3464 -64.8323,112.839 -64.8323,199.498 0,56.0044 9.33406,105.003 27.8402,147.017 18.6681,41.9932 46.8323,73.4981 84.8367,94.4947 37.8222,20.9966 79.1674,31.505 123.651,31.505 56.3486,0 102.513,-14.3352 138.168,-42.8435 35.8379,-28.4881 58.839,-68.821 69.0032,-121.323l-85.5049 -13.1811c-8.15971,34.8458 -22.4949,61.0055 -43.1675,78.6815 -20.6524,17.4938 -45.6579,26.3217 -74.9965,26.3217 -44.3216,0 -80.3215,-15.8335 -108,-47.6624 -27.658,-31.667 -41.487,-81.8401 -41.487,-150.499 0,-69.6714 13.3228,-120.33 40.1506,-151.997 26.6659,-31.505 61.5117,-47.3385 104.517,-47.3385 34.5016,0 63.1517,10.6704 86.335,31.8289 23.1631,21.1788 37.8222,53.6759 43.9977,97.6736zm-203.669 -255.34l25.3295 86.335 65.5004 0 -16.1777 -52.1574c27.6782,-3.34082 48.5128,-11.8447 62.5038,-25.6737 14.0112,-13.829 20.9966,-29.1563 20.9966,-46.1641 0,-24.3374 -11.6625,-46.0021 -35.1495,-64.6703 -23.5073,-18.6681 -58.677,-28.0022 -106.016,-28.0022 -26.6659,0 -49.9909,1.84252 -70.3193,5.83126l5.48705 57.1787c20.8346,-1.33633 36.1821,-2.00449 45.8402,-2.00449 30.6748,0 52.1574,4.17097 64.5083,12.6749 9.33406,6.49942 14.1529,14.4972 14.1529,23.9932 0,5.83126 -1.82227,10.9944 -5.66928,15.4893 -3.66478,4.67715 -10.6501,8.50392 -20.6524,11.8447 -10.1642,3.1586 -27.0101,5.00111 -50.3351,5.32507z" + id="path811" /></glyph> + <glyph + unicode="æ" + horiz-adv-x="889" + id="glyph813"><path + d="M846.666 158.659c-16.3397,-54.3238 -43.9977,-96.317 -82.9942,-126 -38.9965,-29.5005 -87.5094,-44.3216 -145.498,-44.3216 -41.3452,0 -77.5071,7.83575 -108.668,23.325 -30.9988,15.6715 -59.163,40.1709 -84.1685,73.3362 -33.8334,-33.1653 -68.1731,-57.6647 -102.837,-73.3362 -34.6636,-15.4893 -71.9998,-23.325 -112.009,-23.325 -55.9841,0 -99.4958,14.3352 -130.657,43.1675 -31.1608,28.8323 -46.6703,63.8199 -46.6703,105.165 0,28.0022 8.15971,54.3238 24.1754,78.8232 16.1574,24.6816 38.6523,43.3497 67.4847,56.0044 28.6704,12.6749 74.6725,23.1631 137.844,31.1608 48.8368,6.49942 89.8378,14.5174 123.003,24.0134 0.323959,8.15971 0.485938,14.8211 0.485938,20.0045 0,40.9808 -8.48367,69.8334 -25.4915,86.1528 -17.1698,16.5017 -46.9943,24.6614 -89.6758,24.6614 -28.3261,0 -52.1574,-3.32058 -71.8176,-10.1642 -19.4983,-6.82338 -33.8334,-16.6636 -43.1675,-29.1563 -9.33406,-12.5129 -17.0078,-32.6793 -23.1631,-60.3373l-85.5049 10.3262c9.15184,38.1664 22.1709,68.3351 39.3205,90.506 17.1698,22.3329 41.6692,39.8267 73.4981,52.5016 31.8492,12.8369 69.1854,19.1743 111.847,19.1743 54.3238,0 98.1595,-8.17996 131.325,-24.4994 19.1743,-9.33406 35.3318,-24.4994 48.3306,-45.334 20.8346,22.6569 44.5038,39.9887 70.8457,51.9954 26.3217,11.8245 58.1708,17.838 95.6691,17.838 52.6635,0 96.317,-12.8369 130.819,-38.3486 34.5016,-25.6535 59.8311,-59.325 75.6646,-101.318 16.0157,-42.0134 24.0134,-83.3384 24.0134,-124.015 0,-6.15522 -0.344206,-16.1574 -1.01237,-29.8245l-374.496 0c0.668165,-46.8323 6.33744,-80.8277 17.3318,-102.007 10.8324,-21.1586 28.3464,-38.8346 52.1776,-52.9875 23.9932,-14.1732 50.3351,-21.3408 78.9852,-21.3408 33.5095,0 61.8356,9.65802 85.1809,28.8323 23.1631,19.1743 39.3205,46.1641 47.9864,81.0099l91.8423 -11.6828zm-373.504 150.499l285.165 0c-4.65691,51.3475 -19.1541,89.0077 -43.9977,112.677 -24.6614,23.8312 -56.9965,35.6557 -96.6612,35.6557 -41.001,0 -74.6725,-12.9988 -100.832,-38.9965 -26.1597,-25.9977 -40.8391,-62.5038 -43.6737,-109.336zm-85.9908 -48.8165c-25.6737,-11.1766 -78.1753,-23.0011 -157.181,-35.676 -35.4937,-5.66928 -60.3171,-13.829 -74.6523,-25.0056 -19.3363,-15.3273 -28.8323,-35.3318 -28.8323,-59.9931 0,-23.1631 8.6659,-42.4993 25.8357,-58.3328 17.3318,-15.8335 42.3171,-23.6692 75.1584,-23.6692 37.4982,0 70.1573,9.17208 97.9975,27.8402 27.8402,18.4859 46.0021,41.6692 54.3441,69.3272 5.00111,16.8256 7.32957,51.9954 7.32957,105.509z" + id="path815" /></glyph> + <glyph + unicode="å" + horiz-adv-x="556" + id="glyph817"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-209.986 392.982c0,23.8515 8.6659,44.3419 25.9977,61.5117 17.4938,17.3318 38.0044,25.8357 61.8356,25.8357 23.9932,0 44.8278,-8.6659 61.9976,-25.9977 17.3318,-17.514 25.8357,-38.5106 25.8357,-63.3339 0,-25.0056 -8.50392,-46.1641 -25.8357,-63.4959 -17.1698,-17.1698 -37.8424,-25.8357 -61.5117,-25.8357 -24.4994,0 -45.334,8.6659 -62.4835,26.1597 -17.3318,17.3318 -25.8357,39.1585 -25.8357,65.1562zm36.992 -0.485938c0,-15.3475 5.16309,-28.1642 15.5095,-38.5106 10.1642,-10.4882 22.3329,-15.6513 36.3239,-15.6513 14.0112,0 26.1597,5.16309 36.3441,15.6513 10.3262,10.3464 15.3273,22.8391 15.3273,37.4982 0,14.6794 -5.00111,27.172 -15.0033,37.6805 -10.1642,10.3262 -22.3329,15.4893 -36.6681,15.4893 -13.991,0 -26.1597,-5.00111 -36.3239,-15.3273 -10.3464,-10.1642 -15.5095,-22.4949 -15.5095,-36.8301z" + id="path819" /></glyph> + <glyph + unicode="ä" + horiz-adv-x="556" + id="glyph821"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-258.823 359.817l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path823" /></glyph> + <glyph + unicode="ã" + horiz-adv-x="556" + id="glyph825"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-285.165 334.832c-0.323959,33.8334 8.84812,60.9852 27.8402,81.1517 18.5061,20.1664 42.1754,30.1687 71.1697,30.1687 20.1664,0 47.6624,-8.6659 82.488,-26.3217 19.3363,-9.84025 34.5016,-14.6794 46.0021,-14.6794 10.3464,0 18.3442,2.83464 23.8312,8.50392 5.66928,5.83126 9.51629,17.0078 11.8447,33.9954l63.3339 0c-0.830144,-37.154 -10.3464,-64.9942 -28.0022,-83.5004 -17.676,-18.4859 -40.3329,-27.82 -67.6669,-27.82 -20.5106,0 -47.5005,9.17208 -81.0099,27.334 -21.8267,11.6625 -37.8222,17.6558 -47.8244,17.6558 -11.1563,0 -20.0045,-3.98874 -26.8278,-11.8245 -7.16759,-7.83575 -10.6704,-19.3363 -10.3464,-34.6636l-64.8323 0z" + id="path827" /></glyph> + <glyph + unicode="â" + horiz-adv-x="556" + id="glyph829"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-120.654 405.657l-55.1742 -82.9942 -100.67 0 105.509 136.67 93.8266 0 109.842 -136.67 -99.6781 0 -53.6557 82.9942z" + id="path831" /></glyph> + <glyph + unicode="á" + horiz-adv-x="556" + id="glyph833"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-170.989 322.663l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path835" /></glyph> + <glyph + unicode="à" + horiz-adv-x="556" + id="glyph837"><path + d="M404.341 64.0021c-32.6793,-27.6782 -64.0021,-47.1765 -94.0088,-58.677 -30.1687,-11.3183 -62.5038,-16.9876 -97.0054,-16.9876 -56.9965,0 -100.67,13.829 -131.325,41.6692 -30.4926,27.82 -45.8402,63.4959 -45.8402,106.663 0,25.4915 5.66928,48.6546 17.3318,69.6714 11.5005,20.9966 26.6659,37.8222 45.334,50.4971 18.8301,12.6546 39.8469,22.3329 63.3339,28.8323 17.1698,4.49493 43.1675,8.98986 78.0133,13.1608 70.9875,8.50392 123.327,18.5061 156.816,30.3306 0.344206,12.0067 0.506186,19.6805 0.506186,22.8391 0,35.8379 -8.32169,61.1675 -25.0056,75.6646 -22.3329,20.0045 -55.8221,29.8245 -99.9818,29.8245 -41.3452,0 -71.8379,-7.14734 -91.6803,-21.6647 -19.6602,-14.4972 -34.1574,-40.1506 -43.6534,-77.001l-85.8491 11.8447c7.83575,36.6681 20.6726,66.4925 38.5106,88.9874 17.838,22.6771 43.8357,40.1709 77.6691,52.3396 33.8334,12.1687 72.992,18.3442 117.658,18.3442 44.3419,0 80.1595,-5.34532 107.838,-15.6715 27.658,-10.5084 48.0066,-23.5073 61.1675,-39.3407 12.9988,-15.8335 21.9887,-35.6557 27.334,-59.8311 2.83464,-15.0033 4.33295,-41.9932 4.33295,-80.9897l0 -117.172c0,-81.8401 1.82227,-133.512 5.66928,-154.994 3.66478,-21.685 11.1563,-42.4993 22.1507,-62.3418l-91.8221 0c-9.0101,18.1619 -15.0033,39.5027 -17.4938,64.0021zm-7.34981 196.339c-31.9909,-13.1811 -79.8153,-24.1754 -143.493,-33.3475 -36.1619,-5.16309 -61.8356,-10.9944 -76.6567,-17.4938 -15.0033,-6.49942 -26.6659,-15.9955 -34.6838,-28.6704 -8.15971,-12.4927 -12.3307,-26.3217 -12.3307,-41.6692 0,-23.487 9.0101,-42.9853 26.6659,-58.6568 17.676,-15.5095 43.6737,-23.3453 77.8311,-23.3453 33.8334,0 64.0021,7.34981 90.344,22.1709 26.3419,14.8414 45.8402,35.1698 58.1708,60.8435 9.49604,19.8222 14.1529,49.1607 14.1529,87.8333l0 32.3351zm-47.9864 322.663l-70.6635 0 -112.839 136.67 117.658 0 65.8446 -136.67z" + id="path839" /></glyph> + <glyph + unicode="ÿ" + horiz-adv-x="500" + id="glyph841"><path + d="M61.9976 -199.66l-9.84025 82.488c19.3363,-5.16309 35.9999,-7.83575 50.3351,-7.83575 19.4983,0 35.1698,3.34082 46.8323,9.84025 11.8447,6.49942 21.3408,15.5095 28.8323,27.334 5.66928,8.6659 14.5174,30.4926 26.8481,65.3384 1.66029,5.00111 4.33295,11.9865 7.83575,21.5028l-196.683 519.488 94.677 0 108 -300.168c13.829,-38.1664 26.5039,-78.1551 37.4982,-120.168 10.1642,40.3329 22.1709,79.6736 36.1619,118.164l110.834 302.173 87.8333 0 -197.169 -527.324c-21.1586,-56.9965 -37.6602,-96.1753 -49.3227,-117.678 -15.6715,-28.9943 -33.5095,-50.1529 -53.6759,-63.6579 -20.3284,-13.505 -44.3216,-20.3284 -72.3238,-20.3284 -17.0078,0 -35.8379,3.66478 -56.6725,10.8324zm56.6725 819.818l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path843" /></glyph> + <glyph + unicode="þ" + horiz-adv-x="556" + id="glyph845"><path + d="M66.0066 -198.668l0 914.495 87.8333 0 0 -251.999c23.6692,25.1675 44.4836,41.6692 62.4835,49.8289 23.3453,11.0146 50.1731,16.6839 80.0178,16.6839 44.3216,0 83.3181,-11.5005 117.152,-34.1777 34.0157,-22.8391 59.5072,-54.992 76.677,-96.4992 17.3318,-41.5072 25.9977,-87.0032 25.9977,-136.488 0,-53.352 -9.49604,-101.176 -28.6704,-143.514 -18.9921,-42.3374 -46.6703,-74.8345 -82.9942,-97.4913 -36.3441,-22.4949 -74.3283,-33.8334 -113.993,-33.8334 -27.0101,0 -52.0156,5.32507 -75.1787,15.9955 -17.4938,8.50392 -38.1664,25.0056 -61.4914,49.343l0 -252.344 -87.8333 0zm79.4914 455c0,-66.6748 13.505,-115.997 40.4948,-148.009 27.0101,-31.8289 59.8311,-47.8244 98.1798,-47.8244 38.9965,0 72.4858,16.5017 100.326,49.6669 27.8402,33.0033 41.8312,84.1685 41.8312,153.496 0,66.1686 -13.667,115.512 -40.8391,148.495 -27.1518,32.8413 -59.6489,49.343 -97.3294,49.343 -37.4982,0 -70.6635,-17.4938 -99.4958,-52.5016 -28.8323,-35.0078 -43.1675,-85.9908 -43.1675,-152.666z" + id="path847" /></glyph> + <glyph + unicode="ý" + horiz-adv-x="500" + id="glyph849"><path + d="M61.9976 -199.66l-9.84025 82.488c19.3363,-5.16309 35.9999,-7.83575 50.3351,-7.83575 19.4983,0 35.1698,3.34082 46.8323,9.84025 11.8447,6.49942 21.3408,15.5095 28.8323,27.334 5.66928,8.6659 14.5174,30.4926 26.8481,65.3384 1.66029,5.00111 4.33295,11.9865 7.83575,21.5028l-196.683 519.488 94.677 0 108 -300.168c13.829,-38.1664 26.5039,-78.1551 37.4982,-120.168 10.1642,40.3329 22.1709,79.6736 36.1619,118.164l110.834 302.173 87.8333 0 -197.169 -527.324c-21.1586,-56.9965 -37.6602,-96.1753 -49.3227,-117.678 -15.6715,-28.9943 -33.5095,-50.1529 -53.6759,-63.6579 -20.3284,-13.505 -44.3216,-20.3284 -72.3238,-20.3284 -17.0078,0 -35.8379,3.66478 -56.6725,10.8324zm143.008 782.664l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path851" /></glyph> + <glyph + unicode="ü" + horiz-adv-x="556" + id="glyph853"><path + d="M405.839 0l0 76.1708c-40.5151,-58.677 -95.3451,-87.8333 -164.672,-87.8333 -30.4926,0 -59.163,5.83126 -85.6668,17.4938 -26.5039,11.6625 -46.1641,26.5039 -59.001,44.1596 -12.9988,17.838 -22.0089,39.5027 -27.172,65.1765 -3.5028,17.3318 -5.32507,44.6658 -5.32507,82.164l0 321.165 87.8333 0 0 -287.493c0,-46.0021 1.82227,-76.839 5.32507,-92.8344 5.66928,-23.1631 17.3318,-41.163 35.1698,-54.5061 18,-13.1608 40.1709,-19.6602 66.5128,-19.6602 26.3217,0 50.983,6.6614 74.1663,20.1664 23.1631,13.505 39.4825,31.9909 48.9988,55.1742 9.65802,23.325 14.4972,57.1585 14.4972,101.318l0 277.835 87.8333 0 0 -518.496 -78.4993 0zm-268.501 620.158l0 100.002 91.8221 0 0 -100.002 -91.8221 0zm182.004 0l0 100.002 91.8221 0 0 -100.002 -91.8221 0z" + id="path855" /></glyph> + <glyph + unicode="û" + horiz-adv-x="556" + id="glyph857"><path + d="M405.839 0l0 76.1708c-40.5151,-58.677 -95.3451,-87.8333 -164.672,-87.8333 -30.4926,0 -59.163,5.83126 -85.6668,17.4938 -26.5039,11.6625 -46.1641,26.5039 -59.001,44.1596 -12.9988,17.838 -22.0089,39.5027 -27.172,65.1765 -3.5028,17.3318 -5.32507,44.6658 -5.32507,82.164l0 321.165 87.8333 0 0 -287.493c0,-46.0021 1.82227,-76.839 5.32507,-92.8344 5.66928,-23.1631 17.3318,-41.163 35.1698,-54.5061 18,-13.1608 40.1709,-19.6602 66.5128,-19.6602 26.3217,0 50.983,6.6614 74.1663,20.1664 23.1631,13.505 39.4825,31.9909 48.9988,55.1742 9.65802,23.325 14.4972,57.1585 14.4972,101.318l0 277.835 87.8333 0 0 -518.496 -78.4993 0zm-130.333 665.999l-55.1742 -82.9942 -100.67 0 105.509 136.67 93.8266 0 109.842 -136.67 -99.6781 0 -53.6557 82.9942z" + id="path859" /></glyph> + <glyph + unicode="ú" + horiz-adv-x="556" + id="glyph861"><path + d="M405.839 0l0 76.1708c-40.5151,-58.677 -95.3451,-87.8333 -164.672,-87.8333 -30.4926,0 -59.163,5.83126 -85.6668,17.4938 -26.5039,11.6625 -46.1641,26.5039 -59.001,44.1596 -12.9988,17.838 -22.0089,39.5027 -27.172,65.1765 -3.5028,17.3318 -5.32507,44.6658 -5.32507,82.164l0 321.165 87.8333 0 0 -287.493c0,-46.0021 1.82227,-76.839 5.32507,-92.8344 5.66928,-23.1631 17.3318,-41.163 35.1698,-54.5061 18,-13.1608 40.1709,-19.6602 66.5128,-19.6602 26.3217,0 50.983,6.6614 74.1663,20.1664 23.1631,13.505 39.4825,31.9909 48.9988,55.1742 9.65802,23.325 14.4972,57.1585 14.4972,101.318l0 277.835 87.8333 0 0 -518.496 -78.4993 0zm-184.677 583.004l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path863" /></glyph> + <glyph + unicode="ù" + horiz-adv-x="556" + id="glyph865"><path + d="M405.839 0l0 76.1708c-40.5151,-58.677 -95.3451,-87.8333 -164.672,-87.8333 -30.4926,0 -59.163,5.83126 -85.6668,17.4938 -26.5039,11.6625 -46.1641,26.5039 -59.001,44.1596 -12.9988,17.838 -22.0089,39.5027 -27.172,65.1765 -3.5028,17.3318 -5.32507,44.6658 -5.32507,82.164l0 321.165 87.8333 0 0 -287.493c0,-46.0021 1.82227,-76.839 5.32507,-92.8344 5.66928,-23.1631 17.3318,-41.163 35.1698,-54.5061 18,-13.1608 40.1709,-19.6602 66.5128,-19.6602 26.3217,0 50.983,6.6614 74.1663,20.1664 23.1631,13.505 39.4825,31.9909 48.9988,55.1742 9.65802,23.325 14.4972,57.1585 14.4972,101.318l0 277.835 87.8333 0 0 -518.496 -78.4993 0zm-50.3351 583.004l-70.6635 0 -112.839 136.67 117.658 0 65.8446 -136.67z" + id="path867" /></glyph> + <glyph + unicode="ø" + horiz-adv-x="610" + id="glyph869"><path + d="M448.663 487.841l48.3306 62.4835 47.0145 -34.1574 -52.3396 -67.5049c20.4904,-28.0022 34.5016,-53.3317 41.9932,-76.1708 10.1642,-32.4971 15.1653,-70.3193 15.1653,-113.649 0,-97.6736 -27.496,-169.511 -82.488,-215.352 -44.6658,-36.8301 -98.3417,-55.154 -161.169,-55.154 -51.6714,0 -97.5116,12.9988 -137.176,38.9965l-51.3272 -65.8244 -45.8402 34.6636 52.6838 68.821c-19.1743,22.0089 -32.8413,44.1799 -41.001,66.3306 -12.9988,35.514 -19.4983,75.6849 -19.4983,120.675 0,97.9975 23.8312,168.843 71.8176,212.659 47.8447,43.6737 104.011,65.6826 168.337,65.6826 26.8278,0 51.3272,-3.5028 73.8424,-10.3464 22.3329,-6.82338 46.3261,-17.4938 71.6556,-32.1529zm-49.3227 -64.5083c-29.5005,22.8391 -60.6815,34.1574 -93.1786,34.1574 -43.3295,0 -79.6534,-16.4814 -108.83,-49.8289 -29.3385,-33.1653 -43.9977,-82.6702 -43.9977,-148.333 0,-48.8368 8.50392,-89.6556 25.3295,-122.659l220.677 286.663zm36.6681 -47.3385l-219.178 -284.659c25.3295,-20.5106 53.9999,-30.8368 85.8288,-30.8368 45.334,0 82.6702,16.6636 112.171,49.8289 29.5005,33.1653 44.1799,83.0144 44.1799,149.507 0,24.6614 -2.00449,46.3261 -5.85151,64.8323 -2.65241,13.667 -8.32169,30.8368 -17.1496,51.3272z" + id="path871" /></glyph> + <glyph + unicode="÷" + horiz-adv-x="548" + id="glyph873"><path + d="M224.159 450.161l0 100.164 100.002 0 0 -100.164 -100.002 0zm286.501 -138.168l-472.494 0 0 82.0021 472.494 0 0 -82.0021zm-286.501 -156.168l0 100.002 100.002 0 0 -100.002 -100.002 0z" + id="path875" /></glyph> + <glyph + unicode="ö" + horiz-adv-x="556" + id="glyph877"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839zm15.6513 360.829l0 100.002 91.8423 0 0 -100.002 -91.8423 0zm182.004 0l0 100.002 91.8423 0 0 -100.002 -91.8423 0z" + id="path879" /></glyph> + <glyph + unicode="õ" + horiz-adv-x="556" + id="glyph881"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839zm-10.6704 335.844c-0.344206,33.8334 8.82788,60.9852 27.82,81.1517 18.5061,20.1664 42.1754,30.1687 71.1697,30.1687 20.1664,0 47.6624,-8.6659 82.5083,-26.3217 19.3363,-9.84025 34.5016,-14.6794 46.0021,-14.6794 10.3262,0 18.3239,2.83464 23.8312,8.50392 5.66928,5.83126 9.49604,17.0078 11.8245,33.9954l63.3339 0c-0.830144,-37.154 -10.3262,-64.9942 -28.0022,-83.5004 -17.6558,-18.4859 -40.3329,-27.82 -67.6669,-27.82 -20.4904,0 -47.5005,9.17208 -80.9897,27.334 -21.8267,11.6625 -37.8424,17.6558 -47.8447,17.6558 -11.1563,0 -19.9842,-3.98874 -26.8278,-11.8245 -7.16759,-7.83575 -10.6704,-19.3363 -10.3262,-34.6636l-64.8323 0z" + id="path883" /></glyph> + <glyph + unicode="ô" + horiz-adv-x="556" + id="glyph885"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839zm153.82 406.67l-55.154 -82.9942 -100.67 0 105.489 136.67 93.8468 0 109.822 -136.67 -99.6578 0 -53.6759 82.9942z" + id="path887" /></glyph> + <glyph + unicode="ó" + horiz-adv-x="556" + id="glyph889"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839zm103.991 323.675l64.9942 136.67 115.167 0 -107.332 -136.67 -72.83 0z" + id="path891" /></glyph> + <glyph + unicode="ò" + horiz-adv-x="556" + id="glyph893"><path + d="M33.1653 259.329c0,96.0133 26.6659,167.163 80.1595,213.347 44.5038,38.3284 98.8479,57.6647 163.012,57.6647 71.3317,0 129.665,-23.3453 174.837,-70.1776 45.334,-46.6703 67.8289,-111.158 67.8289,-193.505 0,-66.8165 -10.0022,-119.318 -30.0067,-157.484 -20.0045,-38.3486 -49.1607,-68.0111 -87.3271,-89.1697 -38.3284,-21.1788 -79.9976,-31.667 -125.332,-31.667 -72.506,0 -131.163,23.1631 -176.011,69.8334 -44.8278,46.4881 -67.1607,113.487 -67.1607,201.158zm90.344 0c0,-66.4925 14.4972,-116.159 43.4915,-149.163 28.9943,-33.1653 65.5004,-49.6669 109.336,-49.6669 43.6534,0 79.9976,16.6636 108.992,49.8289 28.8323,33.1653 43.3295,83.8446 43.3295,151.835 0,64.1641 -14.4972,112.839 -43.6534,145.842 -29.1765,33.0033 -65.3384,49.4847 -108.668,49.4847 -43.8357,0 -80.3418,-16.4814 -109.336,-49.3227 -28.9943,-32.8413 -43.4915,-82.5083 -43.4915,-148.839zm211.829 323.675l-70.6635 0 -112.839 136.67 117.658 0 65.8446 -136.67z" + id="path895" /></glyph> + <glyph + unicode="ñ" + horiz-adv-x="556" + id="glyph897"><path + d="M66.0066 0l0 518.496 78.9852 0 0 -73.6601c38.1664,56.9965 93.1786,85.5049 165.017,85.5049 31.3228,0 59.9931,-5.66928 86.1528,-16.8459 26.3419,-11.3183 45.8402,-25.9977 58.839,-44.3216 13.1608,-18.1822 22.1709,-39.8469 27.496,-64.8323 3.17885,-16.3397 4.83913,-44.848 4.83913,-85.5049l0 -318.836 -87.9953 0 0 315.495c0,35.676 -3.34082,62.5038 -10.1642,80.3418 -6.84363,17.6558 -19.0123,31.8289 -36.3441,42.3374 -17.4938,10.6501 -37.8222,15.9955 -61.3294,15.9955 -37.4982,0 -69.6714,-12.0067 -97.0054,-35.676 -27.172,-23.8312 -40.6568,-68.821 -40.6568,-135.334l0 -283.16 -87.8333 0zm61.9976 595.173c-0.344206,33.8334 8.82788,60.9852 27.82,81.1517 18.5061,20.1664 42.1754,30.1687 71.1697,30.1687 20.1664,0 47.6827,-8.6659 82.5083,-26.3217 19.3363,-9.84025 34.5016,-14.6794 46.0021,-14.6794 10.3262,0 18.3239,2.83464 23.8312,8.50392 5.66928,5.83126 9.49604,17.0078 11.8245,33.9954l63.3339 0c-0.830144,-37.154 -10.3262,-64.9942 -28.0022,-83.5004 -17.6558,-18.4859 -40.3329,-27.82 -67.6669,-27.82 -20.4904,0 -47.5005,9.17208 -80.9897,27.334 -21.8267,11.6625 -37.8424,17.6558 -47.8447,17.6558 -11.1563,0 -19.9842,-3.98874 -26.8278,-11.8245 -7.16759,-7.83575 -10.6704,-19.3363 -10.3262,-34.6636l-64.8323 0z" + id="path899" /></glyph> + <glyph + unicode="ð" + horiz-adv-x="556" + id="glyph901"><path + d="M150.337 715.827l105.995 0c23.5073,-17.6558 43.8357,-34.1574 61.0055,-49.8289l104.497 49.8289 21.9887 -49.8289 -83.9863 -40.4948c104.153,-119.844 156.33,-243.496 156.33,-371.176 0,-82.326 -22.6771,-147.32 -67.9908,-195.003 -45.172,-47.6624 -102.837,-71.4937 -172.852,-71.4937 -82.9942,0 -147.664,31.505 -194.315,94.677 -30.1687,41.325 -45.334,97.9975 -45.334,169.997 0,84.8367 20.9966,150.499 62.9897,196.663 41.9932,46.3261 94.4947,69.3272 157.667,69.3272 18.8301,0 35.4937,-1.82227 49.8289,-5.83126 14.3352,-3.82676 32.1732,-11.5005 53.6759,-23.0011 -11.6625,23.8312 -22.0089,42.3374 -30.6748,55.4982 -8.82788,13.1811 -21.6647,29.3385 -38.6523,48.6748l-134.18 -62.1798 -21.5028 50.3351 116.666 53.3317c-31.667,29.1765 -65.3182,56.0044 -101.156,80.5038zm274.494 -457.491c0,62.5038 -14.8414,110.166 -44.1596,143.332 -29.5005,33.0033 -65.6624,49.505 -108.668,49.505 -42.3374,0 -77.3452,-16.5017 -105.003,-49.505 -27.658,-33.1653 -41.5072,-83.6624 -41.5072,-151.673 0,-63.1517 14.1732,-110.652 42.6816,-142.501 28.4881,-31.9909 64.1641,-47.9864 106.663,-47.9864 41.6692,0 77.1629,16.8256 106.319,50.6591 29.0146,33.6715 43.6737,82.9942 43.6737,148.171z" + id="path903" /></glyph> + </font> + <style + type="text/css" + id="style905"> + + @font-face { font-family:"Arial";src:url("#FontID0") format(svg)} + .str0 {stroke:#1F1A17;stroke-width:0.7055} + .fil1 {fill:none} + .fil2 {fill:#1F1A17} + .fil0 {fill:#309430} + .fnt1 {font-weight:normal;font-size:4.2333;font-family:'Arial'} + .fnt0 {font-weight:normal;font-size:4.9389;font-family:'Arial'} + + </style> + </defs> + <g + id="Bundesländer"> + <metadata + id="CorelCorpID_0Corel-Layer" /> + <path + id="oberoesterreich" + class="fil0" + d="M129.087 76.2873c-0.1938,-0.516 -0.2967,-0.5988 -0.4353,-0.9377 -0.1673,-0.409 -0.2593,-0.8687 -0.5099,-1.2238 -0.3613,-0.5118 -0.8924,-0.9099 -1.3258,-1.3767 -0.4504,-0.4851 -0.9982,-0.9259 -1.3258,-1.4788 -0.2163,-0.365 -0.1798,-0.8574 -0.3059,-1.2748 -0.0948,-0.3135 -0.4078,-0.6842 -0.357,-0.9179 0.0342,-0.1572 0.4036,-0.1817 0.6119,-0.2549 0.4206,-0.1478 0.9139,-0.1729 1.2748,-0.4079 0.37,-0.241 0.6156,-0.6767 0.9179,-1.0199 0.3266,-0.3707 0.69,-0.7192 0.9688,-1.1218 0.1802,-0.2602 0.2534,-0.5887 0.4079,-0.8669 0.1004,-0.1807 0.2012,-0.3908 0.357,-0.5099 0.1332,-0.1018 0.3356,-0.1312 0.5099,-0.153 0.2337,-0.0292 0.6004,0.1459 0.8367,0.1229 0.4606,-0.045 0.8325,-0.1615 1.254,-0.3268 0.4454,-0.1747 0.9105,-0.4603 1.2238,-0.8159 0.3156,-0.3583 0.338,-0.9916 0.6629,-1.3258 0.27,-0.2777 0.7301,-0.3919 1.1218,-0.5099 0.8491,-0.2559 1.81,-0.2571 2.6006,-0.6119 0.5352,-0.2401 0.8475,-0.9646 1.3767,-1.1728 0.5076,-0.1997 1.1571,-0.0136 1.7338,-0.051 0.7321,-0.0475 1.5123,0.0137 2.1926,-0.204 0.5945,-0.1902 1.1457,-0.608 1.6317,-1.0198 0.7378,-0.625 1.3861,-1.3706 2.0397,-2.0907 0.3493,-0.3847 0.7376,-0.7702 0.9689,-1.2238 0.2106,-0.4133 0.2362,-0.9183 0.3569,-1.3767 0.1343,-0.5104 0.3349,-1.0107 0.4079,-1.5298 0.08,-0.5687 -0.0193,-1.1625 0.051,-1.7337 0.0657,-0.5337 0.3095,-1.0487 0.357,-1.5808 0.0374,-0.4198 -0.0367,-0.855 -0.102,-1.2748 -0.0537,-0.345 -0.3384,-0.7418 -0.255,-1.0198 0.0696,-0.232 0.4594,-0.3685 0.7139,-0.5099 0.3574,-0.1986 0.7328,-0.3889 1.1218,-0.5099 0.3759,-0.1169 0.816,-0.2715 1.1728,-0.204 0.2721,0.0515 0.4509,0.4182 0.7139,0.5609 0.3319,0.1802 0.7027,0.3251 1.0708,0.408 0.3118,0.0701 0.654,-0.0063 0.9689,0.0509 0.246,0.0448 0.5015,0.1249 0.7139,0.255 0.3145,0.1928 0.5932,0.4598 0.8668,0.7139 0.2023,0.1878 0.3462,0.4416 0.5609,0.6119 0.2783,0.2206 0.5913,0.4588 0.9179,0.5609 0.2173,0.0679 0.5625,0.0625 0.7139,-0.051 0.1206,-0.0904 0.0723,-0.3732 0.102,-0.5609 0.0723,-0.4582 0.0499,-0.9586 0.2039,-1.3768 0.0839,-0.2277 0.2947,-0.4763 0.5099,-0.5609 0.2607,-0.1024 0.6246,0.0604 0.9179,0 0.2846,-0.0586 0.6891,-0.143 0.8159,-0.3569 0.1451,-0.245 -0.055,-0.6899 0,-1.0199 0.047,-0.2819 0.1866,-0.5517 0.3059,-0.8158 0.1187,-0.2628 0.3379,-0.4935 0.408,-0.7649 0.0659,-0.2555 0.041,-0.5492 0,-0.8159 -0.061,-0.3962 -0.3134,-0.7804 -0.306,-1.1728 0.0096,-0.5085 0.334,-1.0253 0.3569,-1.5297 0.0111,-0.2435 -0.1317,-0.4965 -0.2549,-0.7139 -0.1658,-0.2925 -0.5806,-0.5183 -0.6119,-0.8159 -0.0367,-0.3483 0.1973,-0.7971 0.4079,-1.1218 0.1973,-0.3042 0.4934,-0.6376 0.8159,-0.7649 0.3234,-0.1277 0.76,-0.0693 1.1218,0 0.437,0.0837 0.9137,0.2037 1.2748,0.4589 0.6247,0.4417 1.0529,1.2119 1.6827,1.6318 0.339,0.226 0.8457,0.1424 1.2238,0.3059 0.2508,0.1084 0.5048,0.2935 0.6629,0.5099 0.1648,0.2255 0.1819,0.554 0.306,0.8159 0.1819,0.384 0.6425,0.754 0.6119,1.1218 -0.0374,0.4481 -0.7656,0.8835 -0.8159,1.3258 -0.0347,0.3056 0.327,0.6505 0.5609,0.9179 0.361,0.4125 0.7466,0.9097 1.2238,1.1218 0.4407,0.1958 1.021,0.0551 1.5298,0.102 0.783,0.0721 1.5619,0.2034 2.3456,0.2549 0.5081,0.0335 1.0469,-0.1311 1.5297,0 0.894,0.2428 1.7197,0.7873 2.6006,1.1218 0.4619,0.1754 0.9792,0.447 1.4278,0.408 0.3333,-0.029 0.6317,-0.383 0.9178,-0.6119 0.3088,-0.247 0.5397,-0.6305 0.8669,-0.8159 0.1827,-0.1035 0.4869,0.0546 0.6629,-0.051 0.2489,-0.1493 0.4751,-0.4403 0.6119,-0.7139 0.1692,-0.3383 0.1755,-0.7583 0.306,-1.1218 0.1074,-0.2994 0.2053,-0.645 0.4079,-0.8668 0.1544,-0.1691 0.4694,-0.3581 0.6629,-0.306 0.2484,0.0669 0.414,0.478 0.6629,0.6629 0.346,0.257 0.7227,0.5067 1.1218,0.6629 0.3828,0.1498 0.8218,0.2728 1.2238,0.2549 0.3629,-0.0161 0.7095,-0.2821 1.0708,-0.3569 0.1316,-0.0272 0.3038,-0.0242 0.408,0.051 0.2018,0.1457 0.3004,0.4922 0.5099,0.6119 0.1475,0.0843 0.3774,-0.0216 0.5609,0 0.1055,0.0124 0.2282,0.0313 0.3059,0.102 0.2962,0.2692 0.4886,0.706 0.8159,0.9178l0.8961 0.2694c0.2805,0.312 0.5188,0.6331 0.6309,0.6704 0.5354,0.1785 1.2242,-0.0283 1.7991,0.1059 0.4834,0.1128 0.9099,0.4409 1.3758,0.635 0.3808,0.1586 0.7725,0.2928 1.1641,0.4233 0.4551,0.1517 0.9351,0.2397 1.3758,0.4233 0.406,0.1692 0.9152,0.3408 1.1641,0.635 0.1391,0.1644 0.1482,0.5926 0,0.7408 -0.2751,0.2752 -1.0319,0.2178 -1.2699,0.5291 -0.2205,0.2884 -0.1407,0.8524 -0.1059,1.27 0.0358,0.429 0.168,0.8642 0.3175,1.27 0.0975,0.2645 0.4262,0.4732 0.642,0.6315 0.3133,0.2297 0.7295,0.2502 0.9455,0.5326 0.2426,0.3173 0.0693,0.9487 0.2116,1.3758 0.0694,0.2079 0.3653,0.32 0.4234,0.5292 0.1183,0.4258 0.0867,0.9165 0.1058,1.3757 0.0161,0.3875 0.1015,0.5703 0.164,0.9455 0.0433,0.2598 0.1658,0.4234 0.2082,0.6862 0.134,0.8308 0.1201,1.9652 0.157,2.8132 0.0336,0.7747 -0.0154,1.2798 -0.0547,1.9456 -0.0243,0.4107 0.2453,1.0602 -0.0267,1.0282 -0.3277,-0.0386 -1.6581,-0.9356 -1.9911,-0.9118 -0.6548,0.0467 -0.971,-0.1089 -1.5734,0.2488 -0.5264,0.3125 -0.9884,1.5519 -1.5398,1.8166 -1.2124,0.582 -2.5947,0.9465 -3.9158,1.27 -0.4075,0.0998 -0.8818,0.1242 -1.2699,0 -0.4938,-0.158 -1.0235,-0.4623 -1.3758,-0.8467 -0.4238,-0.4622 -0.5457,-1.2186 -0.9525,-1.6933 -0.2281,-0.2661 -0.6088,-0.4329 -0.9525,-0.5291 -0.5382,-0.1507 -1.2731,-0.2556 -1.6932,0.007 -0.7088,0.443 -1.2782,1.3041 -1.584,2.1643 -0.2586,0.7272 -0.1957,1.5801 -0.1093,2.3794 0.0547,0.506 0.3459,0.9788 0.4233,1.4816 0.0637,0.4144 -0.0323,0.7599 -0.2187,1.106 -0.3075,0.5711 -1.2271,1.1264 -1.2629,1.6456 -0.0348,0.5038 0.793,1.1106 1.2699,1.5875 0.6167,0.6166 1.2969,1.2264 2.0108,1.6932 0.2032,0.1329 0.5144,0.0127 0.7408,0.1059 0.3734,0.1537 0.7459,0.3746 1.0583,0.635 0.3226,0.2688 0.5139,0.6989 0.8467,0.9524 0.408,0.3109 0.8857,0.5938 1.3758,0.7408 0.5682,0.1705 1.2892,-0.0629 1.7991,0.2117 0.8659,0.4663 1.8957,1.2418 2.3282,2.0108 0.2024,0.3598 -0.2482,0.9302 -0.4233,1.3758 -0.213,0.5422 -0.5464,1.0396 -0.7408,1.5874 -0.1937,0.5458 -0.3642,1.122 -0.4233,1.6933l0.1058 1.8642c-0.7657,0.6013 -1.5733,1.318 -1.8294,1.5289 -0.5727,0.4716 -1.1222,1.0072 -1.7733,1.3477 -0.8858,0.4634 -1.8955,0.6995 -2.8374,1.0641 -0.5241,0.2028 -1.2358,0.2853 -1.5606,0.6384 -0.219,0.2381 0.1184,0.933 -0.0709,1.1349 -0.1654,0.1764 -0.6626,-0.0127 -0.9931,0 -0.2843,0.011 -0.648,-0.1014 -0.8512,0.071 -0.5771,0.4896 -0.8905,1.4389 -1.4896,1.9152 -0.323,0.2567 -0.846,0.2372 -1.2769,0.2837 -0.444,0.048 -0.9038,0.0517 -1.3477,0 -0.5728,-0.0666 -1.1711,-0.1503 -1.7025,-0.3546 -0.3907,-0.1503 -0.7076,-0.4755 -1.064,-0.7094 -0.4002,-0.2627 -0.7969,-0.7072 -1.2059,-0.7803 -0.2531,-0.0452 -0.5237,0.2776 -0.7803,0.4256 -0.3581,0.2067 -0.6816,0.507 -1.064,0.6385 -0.3742,0.1286 -0.8515,-0.01 -1.2059,0.1418 -0.3077,0.1319 -0.4968,0.5069 -0.7802,0.7094 -0.2132,0.1522 -0.5675,0.4256 -0.7094,0.3546 -0.1419,-0.0709 -0.1147,-0.5178 -0.1419,-0.7802 -0.0437,-0.4233 0.0898,-0.9095 -0.0709,-1.2769 -0.1703,-0.3893 -0.6163,-0.6606 -0.9221,-0.993 -0.238,-0.2587 -0.4284,-0.6733 -0.7094,-0.7803 -0.2155,-0.0821 -0.5148,0.1821 -0.7803,0.2128 -0.3493,0.0403 -0.7448,0.1064 -1.064,0 -0.3192,-0.1064 -0.5412,-0.4772 -0.8512,-0.6384 -0.2811,-0.1462 -0.6092,-0.2142 -0.9222,-0.2838 -0.3254,-0.0723 -0.6887,-0.0248 -0.9931,-0.1418 -0.3103,-0.1194 -0.5446,-0.4421 -0.8512,-0.5675 -0.2136,-0.0874 -0.4985,-0.1588 -0.7093,-0.071 -0.6404,0.2669 -1.1923,0.8376 -1.8443,1.135 -0.6957,0.3173 -1.6058,0.2997 -2.199,0.7093 -0.3998,0.2761 -0.6504,0.8609 -0.7803,1.3478 -0.1539,0.5771 -0.0709,1.2297 -0.0709,1.8443 0,0.473 -0.0891,0.9958 0.0709,1.4187 0.171,0.452 0.655,0.7784 0.9222,1.2059 0.3239,0.5183 0.6698,1.0595 0.8512,1.6315 0.126,0.3975 0.1773,0.8867 0.0709,1.2768 -0.1064,0.3902 -0.4089,0.7752 -0.7093,1.064 -0.3144,0.3023 -0.7195,0.5847 -1.135,0.7094 -0.5303,0.1591 -1.1431,0.129 -1.7024,0.0753 -0.6703,-0.0645 -1.2578,-0.1936 -1.853,-0.4966 -0.7053,-0.3591 -1.4493,-0.8853 -2.0484,-1.423 -0.323,-0.2899 -0.7235,-0.4169 -0.9178,-0.7933 -0.1841,-0.3566 -0.3258,-0.667 -0.2172,-1.4057 0.0546,-0.3713 0.0012,-0.795 0.1419,-1.1349 0.1431,-0.3458 0.6792,-0.5801 0.7093,-0.9222 0.0408,-0.4618 -0.3271,-0.9944 -0.4965,-1.4896 -0.138,-0.4033 -0.4915,-0.8327 -0.4256,-1.2059 0.076,-0.4308 0.6374,-0.7681 0.8512,-1.2059 0.2827,-0.5789 0.5068,-1.2193 0.6384,-1.8443 0.0576,-0.2735 0.1015,-0.7194 -0.0709,-0.8512 -0.2296,-0.1756 -0.7831,0.0429 -1.135,-0.071 -0.452,-0.1462 -0.94,-0.3855 -1.2768,-0.7093 -0.278,-0.2673 -0.5675,-0.7514 -0.5675,-1.064 0,-0.1839 0.3429,-0.4026 0.5675,-0.4256 0.6976,-0.0716 1.5461,0.2506 2.199,0.1418 0.1983,-0.033 0.3936,-0.392 0.3547,-0.5674 -0.0556,-0.2502 -0.3649,-0.5922 -0.6385,-0.7094 -0.3884,-0.1665 -0.9017,-0.0732 -1.3477,-0.1419 -0.4762,-0.0732 -0.9467,-0.1849 -1.4187,-0.2837 -0.5447,-0.114 -1.0809,-0.2996 -1.6315,-0.3547 -0.6316,-0.0631 -1.3224,0.1368 -1.9152,0 -0.3294,-0.076 -0.662,-0.3544 -0.8513,-0.6384 -0.2836,-0.4254 -0.3925,-0.9881 -0.5674,-1.4896 -0.1798,-0.5152 -0.4312,-1.0267 -0.4966,-1.5606 -0.0765,-0.6247 0.0454,-1.2769 0.0709,-1.9152 0.0218,-0.5439 0.0188,-1.0918 0.071,-1.6315 0.0187,-0.1933 -0.0138,-0.5436 0.1419,-0.5675 0.4591,-0.0706 1.1406,0.2971 1.7024,0.2837 0.4313,-0.0102 0.9362,-0.1379 1.2768,-0.3546 0.1796,-0.1143 0.3191,-0.4498 0.2837,-0.6384 -0.0355,-0.1897 -0.3096,-0.3588 -0.4965,-0.4966 -0.2623,-0.1933 -0.5418,-0.402 -0.8512,-0.4965 -0.5418,-0.1656 -1.1635,-0.3676 -1.7024,-0.2838 -0.5251,0.0817 -0.9723,0.5761 -1.4897,0.7803 -0.3811,0.1505 -0.7981,0.2648 -1.2059,0.2838 -0.6089,0.0283 -1.2344,-0.0606 -1.8443,-0.1419 -0.4541,-0.0606 -0.9655,-0.0654 -1.3477,-0.2838 -0.4454,-0.2545 -0.7385,-0.7768 -1.135,-1.1349 -0.3365,-0.304 -0.6641,-0.6964 -1.064,-0.8512 -0.3331,-0.129 -0.7568,-0.0079 -1.135,0 -0.7567,0.0157 -1.5776,-0.0889 -2.2699,0.0709 -0.2298,0.053 -0.3356,0.3744 -0.4965,0.5675 -0.312,0.3744 -0.5593,0.8258 -0.9222,1.1349 -0.3688,0.3142 -0.2989,0.1395 -1.0018,0.6595z" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="salzburg" + class="fil0" + d="M120.336 120.803c0.2939,-0.0649 0.5395,-0.1376 0.7341,-0.2937 0.2105,-0.1973 0.2047,-0.7485 0.4405,-0.8075 0.3515,-0.0878 0.9174,0.1651 1.3213,0.3671 0.6238,0.3119 1.1622,0.8033 1.7619,1.1746 0.4281,0.265 0.847,0.6098 1.3214,0.7341 0.5534,0.1449 1.1766,0.0229 1.7618,0.0734 0.8341,0.0719 1.6966,0.0756 2.496,0.2936 0.8156,0.2224 1.6304,0.5854 2.3491,1.0278 0.5537,0.3407 0.8838,1.1088 1.4682,1.3213 0.7615,0.2769 1.7122,0.1173 2.5694,0.1469 1.2717,0.0438 2.652,0.3267 3.8173,0.0734 0.5231,-0.1137 0.8784,-0.7434 1.248,-1.1746 0.3645,-0.4252 0.5427,-1.0714 0.9544,-1.3948 0.2735,-0.2149 0.736,-0.2476 1.1011,-0.2202 0.6137,0.046 1.2635,0.2059 1.8353,0.4404 0.3826,0.157 0.6341,0.6486 1.0277,0.7341 0.7321,0.1592 1.5665,-0.0147 2.3492,0 0.5142,0.0097 1.0679,-0.0878 1.5416,0.0735 0.6764,0.2302 1.2175,0.9391 1.9087,1.1011 0.8749,0.2051 1.9162,-0.2214 2.7896,0 0.8639,0.219 1.7111,0.7543 2.4225,1.3214l2.8062 2.8131c-0.0402,-0.0403 1.3114,-1.1645 1.7315,-1.8647 0.2458,-0.4098 0.0672,-1.025 0.2664,-1.4652 0.2226,-0.4921 0.7247,-0.8549 0.9989,-1.3319 0.2364,-0.411 0.492,-0.8728 0.5328,-1.332 0.048,-0.5397 -0.3265,-1.1534 -0.2664,-1.6649 0.0287,-0.2433 0.3258,-0.4338 0.5328,-0.5994 0.348,-0.2784 0.7737,-0.4637 1.1322,-0.7326 0.2631,-0.1973 0.5922,-0.398 0.7325,-0.6659 0.1039,-0.1983 0.0725,-0.5152 0,-0.7326 -0.0607,-0.1822 -0.2512,-0.3261 -0.3995,-0.4662 -0.2513,-0.2373 -0.5419,-0.4337 -0.7992,-0.666 -0.6528,-0.5891 -1.4962,-1.1079 -1.9313,-1.7981 -0.2087,-0.331 0.1412,-0.892 0,-1.2653 -0.1696,-0.4481 -0.7053,-0.7544 -0.9324,-1.1988 -0.2835,-0.5546 -0.2949,-1.2805 -0.5994,-1.7981 -0.1395,-0.2372 -0.5391,-0.52 -0.7326,-0.4662 -0.2061,0.0572 -0.3144,0.5307 -0.4661,0.7992 -0.1369,0.2421 -0.1985,0.6432 -0.3996,0.7325 -0.1985,0.0883 -0.5349,-0.1258 -0.7992,-0.1998 -0.2906,-0.0813 -0.6385,-0.2967 -0.8658,-0.2664 -0.1056,0.0141 -0.0676,0.2768 -0.1332,0.3996 -0.112,0.2102 -0.2064,0.5442 -0.3995,0.5994 -0.2731,0.078 -0.7333,-0.0226 -0.999,-0.1998 -0.3337,-0.2224 -0.5149,-0.6819 -0.7992,-0.9989 -0.2929,-0.3268 -0.6696,-0.586 -0.9323,-0.9324 -0.2257,-0.2974 -0.392,-0.6496 -0.5328,-0.999 -0.4141,-1.027 -0.8302,-2.0666 -1.1322,-3.1301 -0.2086,-0.7346 -0.328,-1.5057 -0.3996,-2.2643 -0.0394,-0.418 -0.0093,-0.8533 0.0666,-1.2653 0.0795,-0.4315 0.2664,-0.8436 0.3996,-1.2654 0.1332,-0.4218 0.7377,0.3596 0.0324,0.0005 -0.7053,-0.3591 -1.6544,-1.0025 -2.2535,-1.5402 -0.323,-0.2899 -0.7235,-0.4169 -0.9178,-0.7933 -0.1841,-0.3566 -0.3258,-0.667 -0.2172,-1.4057 0.0546,-0.3713 0.0012,-0.795 0.1419,-1.1349 0.1431,-0.3458 0.6792,-0.5801 0.7093,-0.9222 0.0408,-0.4618 -0.3271,-0.9944 -0.4965,-1.4896 -0.138,-0.4033 -0.4915,-0.8327 -0.4256,-1.2059 0.076,-0.4308 0.6374,-0.7681 0.8512,-1.2059 0.2827,-0.5789 0.5068,-1.2193 0.6384,-1.8443 0.0576,-0.2735 0.1015,-0.7194 -0.0709,-0.8512 -0.2296,-0.1756 -0.7831,0.0429 -1.135,-0.071 -0.452,-0.1462 -0.94,-0.3855 -1.2768,-0.7093 -0.278,-0.2673 -0.5675,-0.7514 -0.5675,-1.064 0,-0.1839 0.3429,-0.4026 0.5675,-0.4256 0.6976,-0.0716 1.5461,0.2506 2.199,0.1418 0.1983,-0.033 0.3936,-0.392 0.3547,-0.5674 -0.0556,-0.2502 -0.3649,-0.5922 -0.6385,-0.7094 -0.3884,-0.1665 -0.9017,-0.0732 -1.3477,-0.1419 -0.4762,-0.0732 -0.9467,-0.1849 -1.4187,-0.2837 -0.5447,-0.114 -1.0809,-0.2996 -1.6315,-0.3547 -0.6316,-0.0631 -1.3224,0.1368 -1.9152,0 -0.3294,-0.076 -0.662,-0.3544 -0.8513,-0.6384 -0.2836,-0.4254 -0.3925,-0.9881 -0.5674,-1.4896 -0.1798,-0.5152 -0.4312,-1.0267 -0.4966,-1.5606 -0.0765,-0.6247 0.0454,-1.2769 0.0709,-1.9152 0.0218,-0.5439 0.0188,-1.0918 0.071,-1.6315 0.0187,-0.1933 -0.0138,-0.5436 0.1419,-0.5675 0.4591,-0.0706 1.1406,0.2971 1.7024,0.2837 0.4313,-0.0102 0.9362,-0.1379 1.2768,-0.3546 0.1796,-0.1143 0.3191,-0.4498 0.2837,-0.6384 -0.0355,-0.1897 -0.3096,-0.3588 -0.4965,-0.4966 -0.2623,-0.1933 -0.5418,-0.402 -0.8512,-0.4965 -0.5418,-0.1656 -1.1635,-0.3676 -1.7024,-0.2838 -0.5251,0.0817 -0.9723,0.5761 -1.4897,0.7803 -0.3811,0.1505 -0.7981,0.2648 -1.2059,0.2838 -0.6089,0.0283 -1.2344,-0.0606 -1.8443,-0.1419 -0.4541,-0.0606 -0.9655,-0.0654 -1.3477,-0.2838 -0.4454,-0.2545 -0.7385,-0.7768 -1.135,-1.1349 -0.3365,-0.304 -0.6641,-0.6964 -1.064,-0.8512 -0.3331,-0.129 -0.7568,-0.0079 -1.135,0 -0.7567,0.0157 -1.5776,-0.0889 -2.2699,0.0709 -0.2298,0.053 -0.3356,0.3744 -0.4965,0.5675 -0.312,0.3744 -0.5593,0.8258 -0.9222,1.1349 -0.2755,0.2347 -0.662,0.3311 -0.993,0.4966 -0.331,0.1655 -0.1927,-0.0596 -0.0362,0.2451 0.1565,0.3047 0.3203,0.6471 0.5609,0.8668 0.1504,0.1373 0.4471,0.0772 0.6119,0.204 0.2771,0.2131 0.5338,0.5072 0.7139,0.8159 0.2959,0.5071 0.441,1.1069 0.7139,1.6317 0.169,0.3251 0.4011,0.6167 0.6119,0.9179 0.2651,0.3787 0.5851,0.7261 0.8159,1.1218 0.1261,0.2162 0.2482,0.4695 0.2549,0.7139 0.0102,0.3675 -0.0637,0.775 -0.2039,1.1218 -0.1828,0.4521 -0.4922,0.8615 -0.7649,1.2748 -0.2882,0.4366 -0.6792,0.8181 -0.9179,1.2748 -0.1522,0.2912 -0.1277,0.6635 -0.2549,0.9688 -0.1277,0.3066 -0.3603,0.5677 -0.5099,0.8669 -0.1564,0.3127 -0.373,0.6362 -0.408,0.9688 -0.0329,0.3133 0.0017,0.7828 0.204,0.9689 0.2227,0.2048 0.7102,0.1751 1.0708,0.2039 0.4893,0.0392 0.9927,0.0595 1.4788,0 0.555,-0.0679 0.5099,-0.5099 0.7139,-0.5099 0.2039,0 0.9754,0.491 1.4787,0.9688 0.2531,0.2403 0.4804,0.5204 0.6629,0.8159 0.1744,0.2824 0.3083,0.6008 0.408,0.9179 0.0873,0.2778 0.1529,0.5788 0.1529,0.8668 0,0.2389 -0.0416,0.5071 -0.1529,0.7139 -0.1266,0.2351 -0.4383,0.3753 -0.5609,0.6119 -0.1153,0.2223 -0.1198,0.5076 -0.153,0.7649 -0.0348,0.2696 0.0593,0.5952 -0.051,0.8159 -0.0936,0.1872 -0.4922,0.2154 -0.5609,0.4079 -0.1012,0.2834 0.1096,0.6932 0.051,1.0198 -0.0604,0.3363 -0.2945,0.6387 -0.408,0.9689 -0.0734,0.2137 -0.176,0.4476 -0.1529,0.6629 0.0279,0.2606 0.2039,0.5099 0.3059,0.7648 0.102,0.255 0.3397,0.5288 0.306,0.7649 -0.0343,0.2398 -0.3179,0.4629 -0.51,0.6629 -0.2159,0.2249 -0.4391,0.5674 -0.7138,0.6119 -0.3542,0.0574 -0.782,-0.2966 -1.1729,-0.3059 -0.323,-0.0077 -0.6877,0.3437 -0.9688,0.2549 -0.3648,-0.1152 -0.6546,-0.5685 -0.9688,-0.8668 -1.0286,-0.9765 -1.9804,-2.0943 -3.0595,-2.9576 -0.1957,-0.1565 -0.5581,0.0206 -0.7649,-0.1019 -0.2521,-0.1494 -0.4934,-0.4373 -0.6119,-0.7139 -0.1364,-0.3183 -0.1991,-0.7297 -0.153,-1.0709 0.0389,-0.2877 0.3211,-0.5292 0.4079,-0.8158 0.0831,-0.2743 0.1676,-0.5974 0.102,-0.8669 -0.0874,-0.3594 -0.3256,-0.7173 -0.5609,-1.0198 -0.2406,-0.3094 -0.6142,-0.5147 -0.8669,-0.8159 -0.1892,-0.2257 -0.2186,-0.6415 -0.4589,-0.7649 -0.3886,-0.1995 -0.9485,-0.1743 -1.4277,-0.2039 -1.1696,-0.0724 -2.4463,-0.3115 -3.5185,-0.102 -0.4065,0.0794 -0.6034,0.6544 -0.9178,0.9688 -0.2197,0.1847 -0.432,0.5349 -0.417,0.6217 0.0955,0.5531 -0.0122,1.2614 0.322,1.7118 0.4173,0.5624 1.2812,0.8048 1.8623,1.2742 0.2683,0.2167 0.6107,0.4702 0.6861,0.7841 0.1207,0.5029 -0.206,1.1444 -0.098,1.6662 0.088,0.4257 0.5531,0.7582 0.686,1.1762 0.0958,0.3008 0.1139,0.6823 0,0.9801 -0.3108,0.813 -0.8833,1.552 -1.2741,2.3523 -0.2953,0.6045 -0.4698,1.2706 -0.7841,1.8623 -0.2411,0.4538 -0.4797,1.0166 -0.8822,1.2742 -0.4143,0.2651 -1.046,0.1929 -1.5682,0.294 -0.4906,0.095 -1.0724,0.0519 -1.4702,0.294 -0.3537,0.2153 -0.5683,0.6929 -0.7841,1.0782 -0.2416,0.4315 -0.2271,1.1084 -0.5881,1.3722 -0.4885,0.357 -1.2998,0.3835 -1.9602,0.4901 -0.3524,0.0568 -0.7434,0.0976 -1.0782,0 -0.4493,-0.1311 -0.8317,-0.5856 -1.2742,-0.6861 -0.2763,-0.0628 -0.625,0.0546 -0.8821,0.196 -0.3963,0.218 -0.6591,0.7057 -1.0781,0.8821 -0.8225,0.3463 -1.7624,0.4651 -2.6464,0.6861 -0.4228,0.1057 -0.8435,0.2479 -1.2742,0.294 -0.4841,0.0519 -1.0089,-0.1002 -1.4702,0 -0.2901,0.0631 -0.6742,0.2428 -0.7841,0.4901 -0.1514,0.3408 0.0752,0.8605 0,1.2742 -0.1208,0.6645 -0.4516,1.2949 -0.5881,1.9603 -0.1249,0.6088 -0.2311,1.2485 -0.196,1.8622 0.0303,0.5298 0.1261,1.1591 0.3921,1.5682 0.1588,0.2443 0.6358,0.2074 0.8821,0.3921 0.1458,0.1093 0.2512,0.3066 0.294,0.4901 0.1859,0.7966 0.2614,1.6335 0.3921,2.4503 0.098,0.6126 0,0 0,0 0,0 -0.5,0.2736 0.0258,0.0493 0.5258,-0.2243 0.7613,-0.2726 1.3286,-0.2791 0.3846,-0.0481 0.81,-0.0498 1.1728,0.051 0.2491,0.0692 0.5564,0.2459 0.6629,0.4589l0.0443 0.308c0.0071,0.0496 2.068,-0.4723 2.4504,-0.7841 0.6305,-0.3845 1.0581,-1.0995 1.5682,-1.6663 0.372,-0.4134 0.6299,-1.041 1.0781,-1.2741 0.3685,-0.1917 0.9181,-0.0364 1.3722,0 0.3627,0.029 0.7423,0.26 1.0782,0.196 0.3502,-0.0667 0.6355,-0.5881 0.9801,-0.5881 0.5049,0 1.0282,0.4735 1.5682,0.5881 0.5382,0.1141 1.1241,0.0012 1.6662,0.098 0.3727,0.0665 0.7831,0.1707 1.0782,0.3921 0.3583,0.2687 0.7117,0.6692 0.8821,1.0781 0.1273,0.3062 0.0338,0.356 0.0489,0.3459z" + nodetypes="cssssssssssssssssssssssssssssssscss" + style="fill:#66cc33" /> + <path + id="path7996_0" + class="fil0" + d="M121.624 143.841c-1.2611,0.0107 -2.6004,0.2702 -3.7827,0.0414 -0.6525,-0.1263 -1.0704,-0.9374 -1.6827,-1.2238 -0.4416,-0.2066 -0.9906,-0.1485 -1.4787,-0.255 -0.4467,-0.0974 -0.9263,-0.1531 -1.3258,-0.3569 -0.4334,-0.2211 -0.8198,-0.5752 -1.1728,-0.9179 -0.2249,-0.2182 -0.4412,-0.4775 -0.561,-0.7649 -0.2202,-0.5284 -0.254,-1.1436 -0.4589,-1.6827 -0.1181,-0.3108 -0.2477,-0.7013 -0.5099,-0.8669 -0.3837,-0.2423 -0.9547,-0.2279 -1.4278,-0.3569 -0.2747,-0.0749 -0.6838,-0.057 -0.8158,-0.2549 -0.174,-0.261 -0.1121,-0.7503 -0.102,-1.1219 0.0069,-0.2573 0.0515,-0.5308 0.153,-0.7648 0.1195,-0.2759 0.4345,-0.4958 0.5099,-0.7649 0.0436,-0.1559 -0.0804,-0.3485 -0.153,-0.5099 -0.2333,-0.5185 -0.4173,-1.1085 -0.7649,-1.5298 -0.2133,-0.2586 -0.5965,-0.495 -0.9178,-0.5099 -0.4096,-0.0191 -0.9274,0.4711 -1.2748,0.4079 -0.2135,-0.0388 -0.2528,-0.4889 -0.408,-0.7139 -0.1848,-0.2679 -0.3431,-0.6304 -0.6119,-0.7648 -0.3091,-0.1546 -0.9258,0.063 -1.1218,-0.102 -0.127,-0.107 0.1039,-0.4755 0.153,-0.7139 0.0699,-0.3396 0.3022,-0.7128 0.204,-1.0198 -0.1737,-0.5428 -0.878,-0.9623 -1.0199,-1.5298 -0.181,-0.7242 -0.3296,-1.8525 0.051,-2.3456 0.3672,-0.4757 1.5401,-0.2459 2.1927,-0.5609 0.3333,-0.1609 0.5394,-0.5569 0.7648,-0.8669 0.1826,-0.251 0.3795,-0.5246 0.459,-0.8159 0.0459,-0.1685 0.0791,-0.3756 0.0697,-0.563 -0.0254,0.0042 1.6547,-0.3102 2.425,-0.7799 0.6305,-0.3845 1.0581,-1.0995 1.5682,-1.6663 0.372,-0.4134 0.6299,-1.041 1.0781,-1.2741 0.3685,-0.1917 0.9181,-0.0364 1.3722,0 0.3627,0.029 0.7423,0.26 1.0782,0.196 0.3502,-0.0667 0.6355,-0.5881 0.9801,-0.5881 0.5049,0 1.0282,0.4735 1.5682,0.5881 0.5382,0.1141 1.1241,0.0012 1.6662,0.098 0.3727,0.0665 0.7831,0.1707 1.0782,0.3921 0.3583,0.2687 0.7117,0.6692 0.8821,1.0781 0.039,0.0938 0.0531,0.1988 0.0549,0.309l0 0c0.0056,0.3305 -0.0975,0.7073 0.0431,0.9652 0.2045,0.3749 0.6651,0.7051 1.0782,0.8821 0.5017,0.215 1.1495,0.1027 1.6662,0.294 0.3654,0.1354 0.7311,0.3904 0.9801,0.6861 0.2738,0.3251 0.6132,0.7749 0.5881,1.1762 -0.0402,0.6442 -0.6917,1.3139 -0.7841,1.9603 -0.0383,0.2684 0.2722,0.5178 0.3921,0.7841 0.1742,0.3871 0.2267,0.8664 0.49,1.1761 0.2921,0.3437 0.8502,0.4581 1.1762,0.7842 0.2947,0.2947 0.5617,0.6801 0.6861,1.0781 0.2023,0.6475 0.0595,1.4269 0.294,2.0583 0.1902,0.5121 0.5979,0.9626 0.9802,1.3722 0.9899,1.0606 2.2979,1.9379 3.1364,3.0384 0.207,0.2717 0,0.7188 0,1.0781 0,0.2614 0.1399,0.7842 0,0.7842 -0.2522,0 -0.7529,-0.6001 -1.1762,-0.7842 -0.3281,-0.1426 -0.7338,-0.2597 -1.0781,-0.196 -0.5378,0.0996 -1.0296,0.5066 -1.5682,0.6861 -0.4416,0.1472 -0.9097,0.2445 -1.3722,0.2941 -0.4523,0.0484 -0.9191,-0.0394 -1.3722,0 -0.2984,0.0259 -1.1967,-0.033 -1.1762,0.196 0.0583,0.6482 0.0531,1.7304 -0.196,2.5483 -0.1098,0.2815 -1.4351,2.2945 -1.5058,2.2135z" + nodetypes="cssssssssssssssssssssssssssssssscss" + style="fill:#66cc33" /> + <path + id="tirol" + class="fil0" + d="M35.8884 111.019c0.7697,0.0384 1.1625,-0.0376 1.6407,-0.1789 0.8,-0.2364 1.5573,-0.7634 2.2436,-1.2748 1.0475,-0.7804 2.0851,-1.6511 2.9576,-2.6006 0.2833,-0.3083 0.2357,-0.869 0.5099,-1.1728 0.3547,-0.3931 0.9882,-0.5365 1.3768,-0.9178 0.5293,-0.5195 1.0668,-1.1262 1.3767,-1.7847 0.234,-0.4973 0.245,-1.1227 0.255,-1.6828 0.007,-0.3917 -0.0454,-0.8223 -0.204,-1.1728 -0.1644,-0.3634 -0.5982,-0.6077 -0.7648,-0.9688 -0.1393,-0.3018 -0.153,-0.6786 -0.153,-1.0199 0,-0.5255 0.206,-1.0718 0.153,-1.5807 -0.032,-0.307 -0.4261,-0.5946 -0.408,-0.8669 0.0159,-0.2376 0.2722,-0.6003 0.5099,-0.6629 0.4082,-0.1074 1.1606,-0.0855 1.4278,0.153 0.2087,0.1864 -0.0934,0.7762 0,1.1218 0.0766,0.2833 0.2547,0.6434 0.5099,0.7649 0.4586,0.2184 1.1122,0.3069 1.6318,0.255 0.3303,-0.0331 0.613,-0.338 0.9178,-0.5099 0.3581,-0.202 0.6831,-0.5241 1.0708,-0.6119 0.5131,-0.1162 1.0898,-0.0296 1.6318,0 0.3928,0.0214 0.8309,-0.0055 1.1728,0.1529 0.355,0.1645 0.5837,0.5867 0.9178,0.8159 0.2608,0.1788 0.602,0.2336 0.8669,0.4079 0.381,0.2507 0.6584,0.7346 1.0708,0.8669 0.4885,0.1567 1.0981,0.0793 1.6318,0 0.7241,-0.1076 1.5231,-0.6396 2.1416,-0.5609 0.3163,0.0402 0.6265,0.5991 0.6629,0.9178 0.0316,0.2762 -0.3017,0.5803 -0.4589,0.8669 -0.1318,0.2403 -0.5212,0.614 -0.4079,0.7139 0.1757,0.155 0.9529,-0.1804 1.2747,0.051 0.766,0.5505 1.3511,1.5108 1.9887,2.2946 0.1782,0.2191 0.4409,0.4707 0.459,0.7139 0.0159,0.2157 -0.2515,0.4356 -0.357,0.6629 -0.1154,0.2486 -0.2945,0.5242 -0.3059,0.7649 -0.0056,0.1163 0.1258,0.297 0.2549,0.3059 1.5876,0.11 3.3757,0.4025 4.8952,0.051 0.9791,-0.2264 1.6916,-1.3562 2.6006,-1.7847 0.2808,-0.1324 0.747,-0.0524 0.9689,0.102 0.169,0.1176 0.1888,0.4714 0.2039,0.7139 0.0189,0.3015 -0.2952,0.8041 -0.102,0.9178 0.3847,0.2263 1.3704,0.3959 1.8357,0.102 0.8265,-0.522 1.2723,-1.8342 2.0397,-2.5496 0.2355,-0.2195 0.6419,-0.1896 0.9689,-0.255 0.3529,-0.0706 0.8046,0.0068 1.0708,-0.1529 0.1587,-0.0953 0.2126,-0.412 0.2039,-0.6119 -0.0083,-0.191 -0.3414,-0.3992 -0.2549,-0.5609 0.3044,-0.5692 0.7803,-1.4557 1.4278,-1.6318 1.4772,-0.4018 3.8163,0.4514 4.9462,-0.102 0.5358,-0.2624 -0.3056,-1.7514 0.051,-2.3456 0.4083,-0.6806 1.4798,-1.252 2.2436,-1.4787 0.3241,-0.0963 0.6481,0.4709 1.0198,0.5099 1.413,0.148 2.8897,0.0261 4.3343,0.051 0.5271,0.009 1.1619,0.2246 1.5808,0.051 0.278,-0.1153 0.1914,-0.8321 0.5099,-0.9179 1.6362,-0.4411 3.5628,-0.6003 5.3541,-0.6629 2.1011,-0.0734 4.9123,0.8168 6.323,0.255 0.595,-0.237 -0.2203,-1.7662 -0.306,-2.6516 -0.0672,-0.6954 -0.4699,-1.5926 -0.1529,-2.0907 0.3969,-0.6237 1.8549,-1.4338 2.2946,-1.2748 0.3592,0.1299 -0.1105,1.5917 0.102,2.1417 0.0765,0.1979 0.522,0.1614 0.7649,0.102 0.59,-0.1445 1.1542,-0.6359 1.7337,-0.7139 0.3044,-0.041 0.6037,0.266 0.9178,0.3569 0.3318,0.0961 0.6864,0.229 1.0199,0.204 0.3464,-0.026 0.6698,-0.2972 1.0198,-0.3569 0.3469,-0.0593 0.8251,-0.1513 1.0708,0 0.1962,0.1207 0.2072,0.5372 0.255,0.8158 0.0542,0.3163 -0.1095,0.7133 0.051,0.9689 0.2984,0.4753 0.8544,0.8585 1.3258,1.2238 0.2085,0.1616 0.4776,0.3651 0.7139,0.3569 0.2566,-0.0088 0.4957,-0.3124 0.7648,-0.4079 0.2578,-0.0915 0.8562,-0.1247 1.0879,-0.255 0.0812,-0.1337 0.2411,1.3905 0.4489,1.6706 0.4173,0.5624 1.2812,0.8048 1.8623,1.2742 0.2683,0.2167 0.6107,0.4702 0.6861,0.7841 0.1207,0.5029 -0.206,1.1444 -0.098,1.6662 0.088,0.4257 0.5531,0.7582 0.686,1.1762 0.0958,0.3008 0.1139,0.6823 0,0.9801 -0.3108,0.813 -0.8833,1.552 -1.2741,2.3523 -0.2953,0.6045 -0.4698,1.2706 -0.7841,1.8623 -0.2411,0.4538 -0.4797,1.0166 -0.8822,1.2742 -0.4143,0.2651 -1.046,0.1929 -1.5682,0.294 -0.4906,0.095 -1.0724,0.0519 -1.4702,0.294 -0.3537,0.2153 -0.5683,0.6929 -0.7841,1.0782 -0.2416,0.4315 -0.2271,1.1084 -0.5881,1.3722 -0.4885,0.357 -1.2998,0.3835 -1.9602,0.4901 -0.3524,0.0568 -0.7434,0.0976 -1.0782,0 -0.4493,-0.1311 -0.8317,-0.5856 -1.2742,-0.6861 -0.2763,-0.0628 -0.625,0.0546 -0.8821,0.196 -0.3963,0.218 -0.6591,0.7057 -1.0781,0.8821 -0.8225,0.3463 -1.7624,0.4651 -2.6464,0.6861 -0.4228,0.1057 -0.8435,0.2479 -1.2742,0.294 -0.4841,0.0519 -1.0089,-0.1002 -1.4702,0 -0.2901,0.0631 -0.6742,0.2428 -0.7841,0.4901 -0.1514,0.3408 0.0752,0.8605 0,1.2742 -0.1208,0.6645 -0.4516,1.2949 -0.5881,1.9603 -0.1249,0.6088 -0.2311,1.2485 -0.196,1.8622 0.0303,0.5298 0.1261,1.1591 0.3921,1.5682 0.1588,0.2443 0.6358,0.2074 0.8821,0.3921 0.1458,0.1093 0.2512,0.3066 0.294,0.4901 0.1859,0.7966 0.2614,1.6335 0.3921,2.4503 0.098,0.6126 0,0 0,0l0.0258 0.0493c-0.749,0.3196 -1.7347,1.0758 -2.4958,1.3526 -0.7347,0.2671 -1.5845,0.2022 -2.3456,0.4079 -0.4967,0.1343 -0.9412,0.4381 -1.4278,0.6119 -0.4652,0.1662 -0.9652,0.2355 -1.4278,0.408 -0.5403,0.2014 -1.0782,0.4336 -1.5807,0.7139 -0.3813,0.2126 -0.6648,0.6701 -1.0708,0.7648 -0.6139,0.1433 -1.4651,-0.2941 -1.9887,-0.051 -0.4283,0.1989 -0.5117,1.0094 -0.8669,1.3768 -0.1377,0.1425 -0.4474,0.25 -0.6119,0.153 -0.4984,-0.2939 -0.8503,-1.0415 -1.3768,-1.3258 -0.3233,-0.1746 -0.8068,0.0622 -1.1728,-0.051 -0.5688,-0.1758 -1.054,-0.7841 -1.6317,-0.8158 -0.9691,-0.0533 -2.047,0.634 -3.0085,0.5609 -0.6023,-0.0459 -1.173,-0.9375 -1.6828,-0.9179 -0.3741,0.0144 -0.6337,0.6922 -0.9688,1.0198 -0.4298,0.4203 -0.8416,1.0212 -1.3258,1.2238 -0.2467,0.1033 -0.5949,-0.1673 -0.8668,-0.3059 -0.595,-0.3033 -1.1082,-0.9737 -1.7338,-1.0198 -0.9891,-0.0729 -2.0707,0.4566 -3.1105,0.6629 -1.1019,0.2186 -2.4357,0.1603 -3.3144,0.6119 -0.3451,0.1773 -0.0818,0.9586 -0.357,1.2747 -0.5237,0.6017 -1.6458,0.8352 -2.0396,1.4788 -0.3031,0.4952 0.1416,1.3598 -0.051,1.9377 -0.1473,0.4419 -0.7895,0.6913 -0.9689,1.1218 -0.1605,0.3854 0.1216,0.9408 -0.051,1.3258 -0.2693,0.6009 -0.8352,1.1001 -1.2748,1.6317 -0.2912,0.3523 -0.5461,0.8839 -0.9178,1.0199 -0.3252,0.1189 -0.7769,-0.2422 -1.1728,-0.255 -0.658,-0.0212 -1.3251,0.1161 -1.9887,0.153 -0.5602,0.0311 -1.1669,0.1631 -1.6827,0.051 -0.2661,-0.0579 -0.4086,-0.4374 -0.6629,-0.5609 -0.3406,-0.1654 -0.7619,-0.1664 -1.1218,-0.306 -0.473,-0.1834 -0.8954,-0.5202 -1.3768,-0.6629 -0.4365,-0.1293 -1.1741,0.0498 -1.3768,-0.1529 -0.1372,-0.1373 0.2705,-0.5683 0.3569,-0.8669 0.1006,-0.3473 0.3139,-0.8611 0.204,-1.0708 -0.0771,-0.1472 -0.5765,0.1146 -0.7649,0 -0.2025,-0.1233 -0.2378,-0.5013 -0.4079,-0.7139 -0.3059,-0.3823 -0.6141,-0.8776 -1.0198,-1.0708 -0.3082,-0.1468 -0.7698,-0.0526 -1.1219,0.0509 -0.5148,0.1515 -0.9607,0.5611 -1.4787,0.7139 -0.5188,0.1531 -1.0881,0.204 -1.6318,0.204 -0.5102,0 -1.0242,-0.1121 -1.5297,-0.204 -0.4294,-0.078 -0.9392,-0.0792 -1.2748,-0.3059 -0.2933,-0.1982 -0.5088,-0.6167 -0.6119,-0.9689 -0.1009,-0.3447 -0.0799,-0.7667 0,-1.1218 0.0731,-0.3248 0.3097,-0.6101 0.4589,-0.9178 0.1228,-0.2532 0.3658,-0.5173 0.357,-0.7649 -0.0082,-0.2283 -0.2271,-0.482 -0.408,-0.6629 -0.346,-0.3461 -0.8484,-0.5553 -1.1728,-0.9179 -0.2535,-0.2833 -0.315,-0.7278 -0.5609,-1.0198 -0.298,-0.3539 -0.6667,-0.7863 -1.0708,-0.9178 -0.3267,-0.1064 -0.8199,0.0048 -1.1218,0.2039 -0.4969,0.3278 -0.882,0.8916 -1.2748,1.3768 -0.4741,0.5856 -0.7629,1.4604 -1.3258,1.8357 -0.3549,0.2366 -1.0697,-0.2082 -1.4278,0 -0.3728,0.2168 -0.6099,0.8197 -0.7649,1.2748 -0.117,0.3438 0.1243,0.8464 -0.051,1.1218 -0.1816,0.2855 -0.6664,0.4025 -1.0198,0.5609 -0.6325,0.2836 -1.2832,0.5358 -1.9377,0.7649 -0.2442,0.0855 -0.9418,0.2927 -0.9436,0.2699 -0.0472,-0.598 -0.004,-1.2547 -0.196,-1.8132 -0.1674,-0.487 -0.6655,-0.8505 -0.8821,-1.3232 -0.1428,-0.3114 -0.3409,-0.7901 -0.1961,-1.0292 0.1819,-0.3 0.8231,-0.3399 1.1762,-0.588 0.2514,-0.1767 0.5149,-0.4131 0.6371,-0.6861 0.1555,-0.3477 0.2047,-0.7867 0.196,-1.1762 -0.0077,-0.3456 -0.2032,-0.6807 -0.245,-1.0291 -0.0562,-0.4684 -0.1601,-0.9863 -0.049,-1.4212 0.0849,-0.3329 0.5149,-0.5517 0.6371,-0.8822 0.1555,-0.4209 0.1534,-0.9127 0.196,-1.3721 0.0391,-0.4227 -0.1038,-0.9091 0.049,-1.2742 0.1412,-0.3374 0.5711,-0.5412 0.8331,-0.8331 0.3098,-0.3452 0.6777,-0.6694 0.8821,-1.0782 0.3184,-0.6367 0.5612,-1.357 0.6861,-2.0583 0.0875,-0.4912 0.0077,-1.0173 -0.049,-1.5192 -0.0577,-0.5109 -0.2119,-1.0102 -0.294,-1.5192 -0.0358,-0.2221 -0.2612,-1.0001 -0.2542,-1.5479z" + nodetypes="cssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="vorarlberg" + class="fil0" + d="M35.9465 111.048c0.0654,0.5064 0.1148,1.0154 0.1961,1.5192 0.0821,0.509 0.2363,1.0083 0.294,1.5192 0.0567,0.5019 0.1365,1.028 0.049,1.5192 -0.1249,0.7013 -0.3677,1.4216 -0.6861,2.0583 -0.2044,0.4088 -0.5723,0.733 -0.8821,1.0782 -0.262,0.2919 -0.6919,0.4957 -0.8331,0.8331 -0.1528,0.3651 -0.0099,0.8515 -0.049,1.2742 -0.0426,0.4594 -0.0405,0.9512 -0.196,1.3721 -0.1222,0.3305 -0.5522,0.5493 -0.6371,0.8822 -0.1111,0.4349 -0.0072,0.9528 0.049,1.4212 0.0418,0.3484 0.2373,0.6835 0.245,1.0291 0.0087,0.3895 -0.0405,0.8285 -0.196,1.1762 -0.1222,0.273 -0.3857,0.5094 -0.6371,0.6861 -0.3531,0.2481 -0.9943,0.288 -1.1762,0.588 -0.1448,0.2391 0.0533,0.7178 0.1961,1.0292 0.2166,0.4727 0.7147,0.8362 0.8821,1.3232 0.192,0.5585 0.1488,1.2152 0.196,1.8132 0.0018,0.0228 -0.0327,0.0327 -0.049,0.049l-0.1292 -0.0129c-0.3762,-0.0525 -0.7209,-0.3966 -1.0708,-0.6119 -0.313,-0.1926 -0.6737,-0.3468 -0.9179,-0.6119 -0.3507,-0.3808 -0.5099,-0.9506 -0.8668,-1.3258 -0.306,-0.3217 -0.7479,-0.51 -1.1219,-0.7649 -0.3739,-0.255 -1.6467,-0.1373 -2.1412,-0.3021 -0.4945,-0.1649 -0.9558,-0.5548 -1.3394,-0.9209 -0.2303,-0.2198 -0.4546,-0.5378 -0.5022,-0.8371 -0.0501,-0.3146 0.119,-0.6749 0.2092,-1.0045 0.1888,-0.6889 0.515,-1.3736 0.6279,-2.0509 0.0266,-0.1598 -0.0899,-0.3676 -0.2093,-0.4605 -0.1318,-0.1025 -0.3598,-0.121 -0.5441,-0.1255 -0.3878,-0.0095 -0.8498,0.2392 -1.172,0.0837 -0.487,-0.2351 -0.7536,-1.019 -1.2557,-1.2557 -0.4746,-0.2237 -1.1486,0.039 -1.6742,-0.1256 -0.8557,-0.2679 -1.6267,-0.8519 -2.4695,-1.1719 -0.2594,-0.0985 -0.5572,-0.0728 -0.8371,-0.0837 -0.4317,-0.017 -0.8852,0.0557 -1.2975,0 -0.1039,-0.0141 -0.2691,-0.1166 -0.2511,-0.2093 0.0657,-0.3398 0.3944,-0.7078 0.5022,-1.0883 0.1294,-0.4566 0.1813,-0.9463 0.2093,-1.4231 0.0278,-0.4719 0.0677,-0.9765 -0.0419,-1.423 -0.0787,-0.3209 -0.316,-0.6103 -0.5232,-0.879 -0.309,-0.401 -0.8512,-0.6861 -1.0254,-1.1301 -0.1816,-0.4629 0.1063,-1.1071 -0.0419,-1.5905 -0.1169,-0.3816 -0.6663,-0.6344 -0.7534,-1.0046 -0.0803,-0.3413 0.3502,-0.8118 0.2512,-1.1301 -0.0964,-0.3096 -0.7128,-0.4502 -0.8372,-0.7534 -0.0988,-0.2409 0.0248,-0.6258 0.1675,-0.879 0.2898,-0.5141 0.7552,-0.9472 1.1301,-1.4231 0.3506,-0.445 0.803,-0.8449 1.0464,-1.3393 0.1892,-0.3845 -0.0047,-1.0417 0.2511,-1.2976 0.2464,-0.2464 0.8661,-0.0615 1.2557,-0.2092 0.4196,-0.1592 0.9142,-0.3873 1.1719,-0.7116 0.1748,-0.2198 0.166,-0.6243 0.1256,-0.9208 -0.0433,-0.3174 -0.2852,-0.6036 -0.3767,-0.9208 -0.1178,-0.4083 -0.0638,-0.8966 -0.2511,-1.2557 -0.1475,-0.2827 -0.4767,-0.4832 -0.7534,-0.6697 -0.3651,-0.246 -0.8674,-0.3402 -1.172,-0.6278 -0.1977,-0.1867 -0.4005,-0.5626 -0.3348,-0.7953 0.0878,-0.3114 0.4842,-0.6274 0.7952,-0.8371 0.289,-0.1949 0.6567,-0.3361 1.0045,-0.3767 0.4893,-0.0571 1.0116,0.1123 1.5069,0.0837 0.2302,-0.0133 0.4556,-0.1175 0.6696,-0.2093 0.2743,-0.1175 0.6008,-0.2068 0.7953,-0.4185 0.2798,-0.3046 0.4163,-0.7547 0.6278,-1.1301 0.221,-0.392 0.3797,-0.8366 0.6697,-1.172 0.3759,-0.4347 0.8757,-0.7761 1.328,-1.1383 0.0424,-0.0339 0.1148,-0.0775 0.1561,-0.05 0.1637,0.1088 0.3714,0.2704 0.4589,0.4589 0.1335,0.2875 0.1622,0.6425 0.204,0.9688 0.0431,0.3366 -0.1317,0.7992 0.051,1.0199 0.2253,0.2722 0.7679,0.3797 1.1728,0.4589 0.377,0.0738 0.7823,-0.0142 1.1728,0 0.5444,0.0198 1.1376,-0.0714 1.6317,0.102 0.4748,0.1666 0.9234,0.5468 1.2748,0.9178 0.2605,0.2749 0.4003,0.6684 0.561,1.0199 0.1112,0.2434 0.063,0.6582 0.2549,0.7649 0.267,0.1483 0.8208,-0.1305 1.1218,0 0.2089,0.0905 0.2561,0.4531 0.408,0.6628 0.2051,0.2833 0.42,0.565 0.6629,0.8159 0.267,0.276 0.7005,0.4507 0.8668,0.7649 0.1396,0.2637 0.107,0.6611 0.051,0.9688 -0.046,0.2532 -0.2711,0.4642 -0.3569,0.7139 -0.1012,0.2942 -0.1973,0.6085 -0.204,0.9179 -0.0103,0.4725 -0.0101,1.0765 0.153,1.4277 0.0579,0.1248 0.3399,0 0.5099,0 0.4929,0 1.0156,0.1179 1.4788,0 0.4716,-0.12 0.874,-0.7058 1.3257,-0.7138 0.5002,-0.009 1.3642,0.3134 1.5298,0.6628 0.1404,0.2965 -0.4432,0.8363 -0.6119,1.2748 -0.1713,0.4454 -0.2686,0.9189 -0.4079,1.3768 -0.0986,0.324 -0.1063,0.7212 -0.306,0.9689 -0.2252,0.2792 -0.7891,0.3242 -0.9688,0.6119 -0.1602,0.2563 -0.2796,0.9188 -0.051,1.0198 0.1569,0.0693 0.3669,0.1105 0.6029,0.1279l0.0581 0.0287z" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="kaernten" + class="fil0" + d="M206.617 143.289c-0.2892,-0.0152 -0.5782,-0.028 -0.8662,-0.0179 -0.3928,0.0138 -0.8146,0.0146 -1.1728,0.1529 -0.3897,0.1506 -0.7737,0.4168 -1.0708,0.7139 -0.2808,0.2808 -0.3982,0.8274 -0.6629,1.0199 -0.1093,0.0794 -0.3039,-0.1409 -0.4589,-0.204 -0.3039,-0.1238 -0.6317,-0.3672 -0.9179,-0.3569 -0.1897,0.0067 -0.3201,0.3062 -0.5099,0.4079 -0.2861,0.1533 -0.6014,0.2937 -0.9178,0.3569 -0.2785,0.0557 -0.605,-0.0812 -0.8669,0 -0.231,0.0717 -0.4412,0.2723 -0.6119,0.459 -0.3732,0.4082 -0.7467,0.8477 -1.0198,1.3257 -0.2028,0.3549 -0.3188,0.7718 -0.408,1.1729 -0.0808,0.3638 -0.0663,0.748 -0.1019,1.1218 -0.0324,0.3401 0.0365,0.7427 -0.102,1.0198 -0.0994,0.1988 -0.3898,0.3092 -0.6119,0.4079 -0.3898,0.1733 -0.8053,0.3295 -1.2238,0.408 -0.3974,0.0745 -0.8609,-0.0793 -1.2238,0.051 -0.3,0.1076 -0.5668,0.3964 -0.7649,0.6629 -0.2948,0.3964 -0.4471,0.9033 -0.7139,1.3257 -0.1411,0.2235 -0.2841,0.496 -0.5099,0.6119 -0.4031,0.2071 -0.9238,0.2191 -1.3768,0.357 -0.3289,0.1001 -0.6965,0.1691 -0.9688,0.3569 -0.2206,0.1522 -0.4321,0.4054 -0.51,0.6629 -0.1431,0.4734 -0.0591,1.0336 -0.1529,1.5298 -0.0251,0.1327 -0.1032,0.2813 -0.204,0.3569 -0.1031,0.0774 -0.2985,0.1639 -0.4079,0.102 -0.2815,-0.1591 -0.5164,-0.5037 -0.7649,-0.7649 -0.4144,-0.4357 -0.7723,-1.0881 -1.2238,-1.3258 -0.1944,-0.1023 -0.4651,0.2498 -0.7139,0.306 -0.2781,0.0628 -0.5947,0.1105 -0.8669,0.051 -0.2717,-0.0595 -0.5206,-0.2544 -0.7648,-0.4079 -0.3507,-0.2205 -0.6374,-0.6763 -1.0199,-0.7139 -0.6544,-0.0644 -1.3874,0.321 -2.0906,0.4079 -0.8096,0.1001 -1.6313,0.1591 -2.4476,0.153 -1.4613,-0.0109 -3.1118,0.2902 -4.3853,-0.204 -1.0042,-0.3897 -1.4719,-2.0269 -2.4476,-2.4476 -0.877,-0.3781 -2.1242,0.2737 -3.1105,0.051 -1.1213,-0.2532 -2.0996,-1.2005 -3.2125,-1.4788 -0.7228,-0.1807 -1.5364,0.0178 -2.2946,0.102 -0.4656,0.0517 -0.9157,0.2759 -1.3768,0.306 -0.3207,0.0209 -0.6615,-0.0506 -0.9689,-0.153 -0.4575,-0.1525 -0.856,-0.523 -1.3257,-0.6119 -0.7881,-0.1491 -1.6618,0.0609 -2.4476,-0.102 -0.6079,-0.126 -1.1328,-0.6195 -1.7338,-0.7649 -0.4528,-0.1095 -0.979,0.0998 -1.4277,0 -0.3161,-0.0702 -0.5543,-0.4194 -0.8669,-0.5099 -0.3333,-0.0965 -0.7321,0.0359 -1.0708,-0.051 -0.3242,-0.0831 -0.5857,-0.422 -0.9179,-0.4589 -0.8916,-0.0991 -1.8726,0.1562 -2.7535,0.051 -0.2579,-0.0308 -0.4204,-0.375 -0.6629,-0.4589 -0.1994,-0.0691 -0.4453,-0.0319 -0.6629,0 -0.4793,0.0701 -0.9593,0.1767 -1.4278,0.3059 -0.5173,0.1427 -1.009,0.4313 -1.5297,0.5099 -0.3802,0.0574 -0.7905,-0.0239 -1.1729,-0.102 -0.4505,-0.0919 -0.9158,-0.2073 -1.3257,-0.4079 -0.389,-0.1903 -0.6874,-0.5578 -1.0709,-0.7649 -0.4663,-0.2518 -0.968,-0.4718 -1.4787,-0.6119 -0.5431,-0.1489 -1.1179,-0.2071 -1.6828,-0.2549 -1.6447,-0.1392 -3.298,-0.1961 -4.9462,-0.306 -1.4113,-0.0941 -2.9851,-0.0159 -4.2323,-0.3059 -0.2146,-0.0499 0.0145,-0.5674 -0.1529,-0.7139 -0.3766,-0.3295 -0.9735,-0.5064 -1.4788,-0.7139 -0.4466,-0.1834 -0.9371,-0.4589 -1.3768,-0.4589 -0.2571,0 -0.4707,0.4409 -0.7139,0.4589 -0.2157,0.016 -0.4503,-0.2241 -0.6629,-0.3569 -0.3313,-0.2072 -0.5913,-0.6183 -0.9688,-0.6629 -0.2797,-0.033 -0.5667,-0.0438 -0.8576,-0.0414 0.0451,-0.0091 1.396,-1.9321 1.5058,-2.2135 0.2491,-0.8179 0.2543,-1.9001 0.196,-2.5483 -0.0205,-0.229 0.8778,-0.1701 1.1762,-0.196 0.4531,-0.0394 0.9199,0.0484 1.3722,0 0.4625,-0.0496 0.9306,-0.1469 1.3722,-0.2941 0.5386,-0.1795 1.0304,-0.5865 1.5682,-0.6861 0.3443,-0.0637 0.75,0.0534 1.0781,0.196 0.4233,0.1841 0.924,0.7842 1.1762,0.7842 0.1399,0 0,-0.5228 0,-0.7842 0,-0.3593 0.207,-0.8064 0,-1.0781 -0.8385,-1.1005 -2.1465,-1.9778 -3.1364,-3.0384 -0.3823,-0.4096 -0.79,-0.8601 -0.9802,-1.3722 -0.2345,-0.6314 -0.0917,-1.4108 -0.294,-2.0583 -0.1244,-0.398 -0.3914,-0.7834 -0.6861,-1.0781 -0.326,-0.3261 -0.8841,-0.4405 -1.1762,-0.7842 -0.2633,-0.3097 -0.3158,-0.789 -0.49,-1.1761 -0.1199,-0.2663 -0.4304,-0.5157 -0.3921,-0.7841 0.0924,-0.6464 0.7439,-1.3161 0.7841,-1.9603 0.0251,-0.4013 -0.3143,-0.8511 -0.5881,-1.1762 -0.249,-0.2957 -0.6147,-0.5507 -0.9801,-0.6861 -0.5167,-0.1913 -1.1645,-0.079 -1.6662,-0.294 -0.4131,-0.177 -0.8737,-0.5072 -1.0782,-0.8821l-0.0431 -0.9652c-0.0004,-0.0044 0.6534,-0.1868 0.7281,-0.2568 0.2105,-0.1973 0.2047,-0.7485 0.4405,-0.8075 0.3515,-0.0878 0.9174,0.1651 1.3213,0.3671 0.6238,0.3119 1.1622,0.8033 1.7619,1.1746 0.4281,0.265 0.847,0.6098 1.3214,0.7341 0.5534,0.1449 1.1766,0.0229 1.7618,0.0734 0.8341,0.0719 1.6966,0.0756 2.496,0.2936 0.8156,0.2224 1.6304,0.5854 2.3491,1.0278 0.5537,0.3407 0.8838,1.1088 1.4682,1.3213 0.7615,0.2769 1.7122,0.1173 2.5694,0.1469 1.2717,0.0438 2.652,0.3267 3.8173,0.0734 0.5231,-0.1137 0.8784,-0.7434 1.248,-1.1746 0.3645,-0.4252 0.5427,-1.0714 0.9544,-1.3948 0.2735,-0.2149 0.736,-0.2476 1.1011,-0.2202 0.6137,0.046 1.2635,0.2059 1.8353,0.4404 0.3826,0.157 0.6341,0.6486 1.0277,0.7341 0.7321,0.1592 1.5665,-0.0147 2.3492,0 0.5142,0.0097 1.0679,-0.0878 1.5416,0.0735 0.6764,0.2302 1.2175,0.9391 1.9087,1.1011 0.8749,0.2051 1.9162,-0.2214 2.7896,0 0.8639,0.219 1.7111,0.7543 2.4225,1.3214 0.977,0.7788 1.8984,1.9396 2.7844,2.8401l0 0c0.6067,0.6167 1.0021,1.245 1.6936,1.7113 0.3607,0.2433 0.8879,0.3072 1.3214,0.2937 0.3495,-0.0109 0.7735,-0.1303 1.0278,-0.3671 0.4554,-0.4239 0.6228,-1.2142 1.1011,-1.615 0.4271,-0.3578 1.2182,-0.2879 1.6151,-0.6607 0.4106,-0.3858 0.4659,-1.1311 0.8075,-1.615 0.2457,-0.3481 0.5846,-0.6614 0.9543,-0.8809 1.1964,-0.7104 2.4401,-1.4591 3.7439,-1.9087 0.8251,-0.2845 1.8511,-0.4949 2.6428,-0.2937 0.6521,0.1658 1.0561,1.066 1.6885,1.3948 0.5912,0.3075 1.3183,0.3559 1.982,0.5139 0.3641,0.0867 0.7919,0.0389 1.1012,0.2202 0.4003,0.2347 0.6337,0.7853 1.0278,1.0278 0.2421,0.149 0.618,0.2564 0.8809,0.1468 0.9117,-0.3799 1.6742,-1.378 2.6428,-1.615 1.3316,-0.3259 2.8385,-0.0734 4.2578,-0.0734 1.615,0 3.265,0.2507 4.8451,0.0734 0.818,-0.0918 1.5641,-0.5926 2.3491,-0.8809 0.4141,-0.1521 0.8419,-0.4832 1.248,-0.4405 0.5238,0.0551 1.1398,0.3435 1.5416,0.7341 1.3601,1.3223 2.6077,2.8652 3.7439,4.4046 0.381,0.5161 0.611,1.1558 0.8075,1.7619 0.0971,0.2993 0.1248,0.6462 0.0734,0.9543 -0.071,0.426 -0.2352,0.8649 -0.4404,1.248 -0.1618,0.302 -0.5983,0.4956 -0.6607,0.8075 -0.0844,0.4222 0.0312,0.9814 0.2202,1.3948 0.2026,0.4431 0.7548,0.7285 0.9544,1.1746 0.2164,0.4838 0.236,1.0716 0.2936,1.615 0.1137,1.0717 -0.2392,2.3466 0.2202,3.2301 0.2401,0.4618 2.6428,2.2757 2.5931,2.298z" + nodetypes="cssssssssssssssssssssssssssssssscss" + style="fill:#66cc33" /> + <path + id="steiermark" + class="fil0" + d="M153.268 101.57c0.5952,0.303 0.9776,0.3149 1.6479,0.3794 0.5593,0.0537 1.1721,0.0838 1.7024,-0.0753 0.4155,-0.1247 0.8206,-0.4071 1.135,-0.7094 0.3004,-0.2888 0.6029,-0.6738 0.7093,-1.064 0.1064,-0.3901 0.0551,-0.8793 -0.0709,-1.2768 -0.1814,-0.572 -0.5273,-1.1132 -0.8512,-1.6315 -0.2672,-0.4275 -0.7512,-0.7539 -0.9222,-1.2059 -0.16,-0.4229 -0.0709,-0.9457 -0.0709,-1.4187 0,-0.6146 -0.083,-1.2672 0.0709,-1.8443 0.1299,-0.4869 0.3805,-1.0717 0.7803,-1.3478 0.5932,-0.4096 1.5033,-0.392 2.199,-0.7093 0.652,-0.2974 1.2039,-0.8681 1.8443,-1.135 0.2108,-0.0878 0.4957,-0.0164 0.7093,0.071 0.3066,0.1254 0.5409,0.4481 0.8512,0.5675 0.3044,0.117 0.6677,0.0695 0.9931,0.1418 0.313,0.0696 0.6411,0.1376 0.9222,0.2838 0.31,0.1612 0.532,0.532 0.8512,0.6384 0.3192,0.1064 0.7147,0.0403 1.064,0 0.2655,-0.0307 0.5648,-0.2949 0.7803,-0.2128 0.281,0.107 0.4714,0.5216 0.7094,0.7803 0.3058,0.3324 0.7518,0.6037 0.9221,0.993 0.1607,0.3674 0.0272,0.8536 0.0709,1.2769 0.0272,0.2624 0,0.7093 0.1419,0.7802 0.1419,0.071 0.4962,-0.2024 0.7094,-0.3546 0.2834,-0.2025 0.4725,-0.5775 0.7802,-0.7094 0.3544,-0.1518 0.8317,-0.0132 1.2059,-0.1418 0.3824,-0.1315 0.7059,-0.4318 1.064,-0.6385 0.2566,-0.148 0.5272,-0.4708 0.7803,-0.4256 0.409,0.0731 0.8057,0.5176 1.2059,0.7803 0.3564,0.2339 0.6733,0.5591 1.064,0.7094 0.5314,0.2043 1.1297,0.288 1.7025,0.3546 0.4439,0.0517 0.9037,0.048 1.3477,0 0.4309,-0.0465 0.9539,-0.027 1.2769,-0.2837 0.5991,-0.4763 0.9125,-1.4256 1.4896,-1.9152 0.2032,-0.1724 0.5669,-0.06 0.8512,-0.071 0.3305,-0.0127 0.8277,0.1764 0.9931,0 0.1893,-0.2019 -0.1481,-0.8968 0.0709,-1.1349 0.3248,-0.3531 1.0365,-0.4356 1.5606,-0.6384 0.9419,-0.3646 1.9516,-0.6007 2.8374,-1.0641 0.6511,-0.3405 1.2006,-0.8761 1.7733,-1.3477 0.6332,-0.5214 1.1636,-0.9887 1.7783,-1.5325 0.0179,0.447 0.1228,0.5936 0.2628,0.891 0.0999,0.2124 0.3948,0.389 0.635,0.4233 0.5006,0.0715 1.0598,-0.1228 1.5874,-0.1058 0.566,0.0182 1.1719,0.0254 1.6933,0.2117 0.4664,0.1665 0.8409,0.5735 1.27,0.8466 0.3469,0.2208 0.6887,0.5766 1.0583,0.635 0.3006,0.0475 0.7219,-0.0998 0.9524,-0.3175 0.4045,-0.382 0.5123,-1.1946 0.9525,-1.4816 0.3712,-0.2421 0.9873,-0.1059 1.4816,-0.1059 0.7757,0 1.5759,0.2256 2.3283,0.1059 0.7998,-0.1273 1.5516,-0.5662 2.3283,-0.8467 0.4932,-0.1781 1.1311,-0.1953 1.4816,-0.5291 0.3903,-0.3717 0.4186,-1.1149 0.7408,-1.5875 0.2069,-0.3035 0.5101,-0.6384 0.8467,-0.7408 0.4748,-0.1445 1.0846,0.1117 1.5874,0 0.4497,-0.0999 0.8208,-0.5185 1.27,-0.635 0.5033,-0.1305 1.0627,-0.1467 1.5874,-0.1058 0.7188,0.0561 1.1642,0.2117 1.27,0.635 0.1058,0.4233 0.3292,1.3347 1.0583,1.7991 0.4615,0.294 1.0893,0.2893 1.5874,0.5291 0.4544,0.2188 0.8534,0.555 1.27,0.8467 0.2889,0.2022 0.5177,0.5896 0.8467,0.635 0.694,0.0957 1.5419,-0.3434 2.2224,-0.2117 0.4131,0.08 0.6794,0.6074 1.0583,0.8466 0.2914,0.1841 0.631,0.2919 0.9525,0.4234 0.4546,0.1859 0.9445,0.3032 1.3758,0.5291 0.3096,0.1622 0.6989,0.3397 0.8466,0.635 0.2404,0.4808 0.1871,1.1346 0.3175,1.6933 0.1166,0.4996 0.187,1.114 0.4233,1.4816 0.0812,0.1263 0.373,0.0669 0.5292,0 0.3377,-0.1447 0.6058,-0.5194 0.9524,-0.635 0.2884,-0.0961 0.6801,-0.1089 0.9525,0 0.2568,0.1027 0.5616,0.3661 0.635,0.635 0.1383,0.5071 -0.2176,1.2581 0,1.6933 0.1704,0.3408 0.76,0.4618 1.1641,0.635 0.3367,0.1443 0.8479,0.0575 1.0583,0.3175 0.3893,0.4808 0.3516,1.424 0.7408,1.9049 0.2105,0.26 0.6967,0.2723 1.0583,0.3175 0.485,0.0606 1.0061,-0.0915 1.4817,0 0.4416,0.0849 0.8733,0.3088 1.2699,0.5292 0.2383,0.1324 0.3867,0.4877 0.635,0.5291 0.3867,0.0645 0.8919,-0.3148 1.27,-0.2117 0.398,0.1086 0.8294,0.4733 1.0583,0.8467 0.4414,0.7202 0.635,1.6227 0.9525,2.4341l0.0348 0.0805c-0.3505,0.3261 -0.6131,0.8615 -0.9633,1.2117 -0.2944,0.2944 -0.6972,0.809 -0.9344,0.8306 -0.1434,0.013 -0.0484,-0.6631 -0.2076,-0.7268 -0.1869,-0.0747 -0.703,0.1042 -0.8306,0.3115 -0.1493,0.2426 0.0972,0.7273 0,1.0382 -0.0759,0.2428 -0.5585,0.3687 -0.5191,0.6229 0.272,1.7529 1.0709,3.5812 1.4535,5.3985 0.1711,0.8128 0.0005,1.6951 0.2076,2.4917 0.2428,0.9337 1.0406,1.7575 1.142,2.6992 0.1409,1.3077 -0.4195,3.8034 -0.0978,4.2606 0.7735,1.0991 2.0624,2.0427 1.7589,3.1206 -0.0635,0.2255 -0.0008,-0.0226 -0.1038,0.1975 -0.6583,1.4064 -1.2721,2.9341 -2.1802,4.1528 -0.407,0.5462 -1.5073,0.5814 -1.7649,1.142 -0.3307,0.7198 -0.2082,1.8662 0,2.6992 0.1378,0.5513 0.6921,0.969 1.0382,1.4535l-0.0437 -0.0602c-0.3129,0.1438 -0.4867,0.0356 -0.807,0.1637 -0.1896,0.0759 -0.4704,0.1724 -0.5099,0.357 -0.1134,0.5293 0.051,1.1897 0.051,1.7847 0,0.8158 -0.1111,1.6428 -0.051,2.4476 0.0249,0.334 0.1205,0.715 0.3059,0.9688 0.1375,0.1881 0.4744,0.1975 0.6629,0.357 0.2535,0.2144 0.5315,0.4691 0.6629,0.7648 0.1405,0.3162 0.1204,0.7126 0.153,1.0709 0.0184,0.2026 0.0358,0.4148 0,0.6119 -0.0322,0.1768 -0.0855,0.5161 -0.204,0.5099 -0.2045,-0.0108 -0.5206,-0.3605 -0.7648,-0.5609 -0.4187,-0.3436 -0.7627,-0.8556 -1.2238,-1.0708 -0.3037,-0.1418 -0.7368,0.1019 -1.0709,0 -0.6688,-0.2041 -1.251,-0.7931 -1.9377,-0.9179 -0.9961,-0.1811 -2.1259,-0.1758 -3.1105,0 -0.4432,0.0791 -0.7285,0.6892 -1.1728,0.7649 -1.0515,0.1792 -2.2672,-0.2251 -3.3144,0 -0.7715,0.1658 -1.3982,0.8528 -2.1417,1.1728 -0.5993,0.2579 -1.3802,0.2474 -1.8867,0.5609 -0.2074,0.1284 -0.1883,0.505 -0.2549,0.7649 -0.1034,0.403 -0.0354,0.9218 -0.255,1.2238 -0.1883,0.2589 -0.63,0.3526 -0.9688,0.4589 -0.528,0.1656 -1.1733,0.5201 -1.6318,0.3569 -0.5444,-0.1937 -0.7899,-1.2529 -1.3768,-1.4277 -1.0108,-0.3011 -2.2778,-0.0121 -3.4164,0 -0.4592,0.0049 -0.93,-0.0235 -1.3768,0.051 -0.2671,0.0445 -0.4984,0.2638 -0.7649,0.3059 -0.3794,0.0599 -0.7818,0 -1.1728,0 -0.3399,0 -0.6907,0.0564 -1.0198,0 -0.2658,-0.0456 -0.5012,-0.2494 -0.7649,-0.3059 -0.2122,-0.0455 -0.442,-0.0053 -0.6629,0 -0.493,0.0117 -0.9858,0.051 -1.4787,0.051 -0.2889,0 -0.5784,-0.0178 -0.8676,-0.0331l0.0497 -0.0223c-0.8809,-0.7586 -2.1479,-1.324 -2.6428,-2.2757 -0.4594,-0.8835 -0.1065,-2.1584 -0.2202,-3.2301 -0.0576,-0.5434 -0.0772,-1.1312 -0.2936,-1.615 -0.1996,-0.4461 -0.7518,-0.7315 -0.9544,-1.1746 -0.189,-0.4134 -0.3046,-0.9726 -0.2202,-1.3948 0.0624,-0.3119 0.4989,-0.5055 0.6607,-0.8075 0.2052,-0.3831 0.3694,-0.822 0.4404,-1.248 0.0514,-0.3081 0.0237,-0.655 -0.0734,-0.9543 -0.1965,-0.6061 -0.4265,-1.2458 -0.8075,-1.7619 -1.1362,-1.5394 -2.3838,-3.0823 -3.7439,-4.4046 -0.4018,-0.3906 -1.0178,-0.679 -1.5416,-0.7341 -0.4061,-0.0427 -0.8339,0.2884 -1.248,0.4405 -0.785,0.2883 -1.5311,0.7891 -2.3491,0.8809 -1.5801,0.1773 -3.2301,-0.0734 -4.8451,-0.0734 -1.4193,0 -2.9262,-0.2525 -4.2578,0.0734 -0.9686,0.237 -1.7311,1.2351 -2.6428,1.615 -0.2629,0.1096 -0.6388,0.0022 -0.8809,-0.1468 -0.3941,-0.2425 -0.6275,-0.7931 -1.0278,-1.0278 -0.3093,-0.1813 -0.7371,-0.1335 -1.1012,-0.2202 -0.6637,-0.158 -1.3908,-0.2064 -1.982,-0.5139 -0.6324,-0.3288 -1.0364,-1.229 -1.6885,-1.3948 -0.7917,-0.2012 -1.8177,0.0092 -2.6428,0.2937 -1.3038,0.4496 -2.5475,1.1983 -3.7439,1.9087 -0.3697,0.2195 -0.7086,0.5328 -0.9543,0.8809 -0.3416,0.4839 -0.3969,1.2292 -0.8075,1.615 -0.3969,0.3728 -1.188,0.3029 -1.6151,0.6607 -0.4783,0.4008 -0.6457,1.1911 -1.1011,1.615 -0.2543,0.2368 -0.6783,0.3562 -1.0278,0.3671 -0.4335,0.0135 -0.9607,-0.0504 -1.3214,-0.2937 -0.6915,-0.4663 -1.0869,-1.0946 -1.6936,-1.7113l0.0218 -0.027c0.5771,-0.6216 1.3114,-1.1645 1.7315,-1.8647 0.2458,-0.4098 0.0672,-1.025 0.2664,-1.4652 0.2226,-0.4921 0.7247,-0.8549 0.9989,-1.3319 0.2364,-0.411 0.492,-0.8728 0.5328,-1.332 0.048,-0.5397 -0.3265,-1.1534 -0.2664,-1.6649 0.0287,-0.2433 0.3258,-0.4338 0.5328,-0.5994 0.348,-0.2784 0.7737,-0.4637 1.1322,-0.7326 0.2631,-0.1973 0.5922,-0.398 0.7325,-0.6659 0.1039,-0.1983 0.0725,-0.5152 0,-0.7326 -0.0607,-0.1822 -0.2512,-0.3261 -0.3995,-0.4662 -0.2513,-0.2373 -0.5419,-0.4337 -0.7992,-0.666 -0.6528,-0.5891 -1.4962,-1.1079 -1.9313,-1.7981 -0.2087,-0.331 0.1412,-0.892 0,-1.2653 -0.1696,-0.4481 -0.7053,-0.7544 -0.9324,-1.1988 -0.2835,-0.5546 -0.2949,-1.2805 -0.5994,-1.7981 -0.1395,-0.2372 -0.5391,-0.52 -0.7326,-0.4662 -0.2061,0.0572 -0.3144,0.5307 -0.4661,0.7992 -0.1369,0.2421 -0.1985,0.6432 -0.3996,0.7325 -0.1985,0.0883 -0.5349,-0.1258 -0.7992,-0.1998 -0.2906,-0.0813 -0.6385,-0.2967 -0.8658,-0.2664 -0.1056,0.0141 -0.0676,0.2768 -0.1332,0.3996 -0.112,0.2102 -0.2064,0.5442 -0.3995,0.5994 -0.2731,0.078 -0.7333,-0.0226 -0.999,-0.1998 -0.3337,-0.2224 -0.5149,-0.6819 -0.7992,-0.9989 -0.2929,-0.3268 -0.6696,-0.586 -0.9323,-0.9324 -0.2257,-0.2974 -0.392,-0.6496 -0.5328,-0.999 -0.4141,-1.027 -0.8302,-2.0666 -1.1322,-3.1301 -0.2086,-0.7346 -0.328,-1.5057 -0.3996,-2.2643 -0.0394,-0.418 -0.0093,-0.8533 0.0666,-1.2653 0.0795,-0.4315 0.2664,-0.8436 0.3996,-1.2654l0.0324 0.0005z" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="burgenland" + class="fil0" + d="M271.682 65.813c0.3358,0.363 0.6203,0.6338 0.8171,1.072 0.1772,0.3947 0.1957,0.8825 0.2039,1.3258 0.0088,0.4745 -0.1639,0.9566 -0.1529,1.4278 0.006,0.2597 0.0212,0.6664 0.2039,0.7648 0.2592,0.1396 0.763,-0.1138 1.1219,-0.051 0.321,0.0562 0.7111,0.1914 0.9178,0.408 0.1502,0.1574 0.2099,0.5025 0.153,0.7139 -0.0621,0.2305 -0.3358,0.4116 -0.5099,0.6119 -0.1658,0.1906 -0.3784,0.3489 -0.51,0.5609 -0.1743,0.2809 -0.3329,0.5989 -0.4079,0.9178 -0.0609,0.259 0.0499,0.552 0,0.8159 -0.0691,0.365 -0.2993,0.7058 -0.3569,1.0708 -0.0444,0.2809 0.0584,0.5783 0.051,0.8669 -0.0096,0.3743 0.0069,0.7751 -0.102,1.1218 -0.078,0.2482 -0.2432,0.5307 -0.459,0.6629 -0.3111,0.1907 -0.8139,0.1067 -1.1218,0.3059 -0.27,0.1748 -0.6119,0.5471 -0.6119,0.8159 0,0.2582 0.4029,0.5141 0.6119,0.7649 0.216,0.2591 0.5096,0.4786 0.6629,0.7649 0.1016,0.1896 0.1096,0.4426 0.102,0.6629 -0.0094,0.2726 -0.1436,0.5432 -0.153,0.8158 -0.0076,0.2203 0.0279,0.4553 0.102,0.6629 0.0958,0.2683 0.3533,0.4917 0.4079,0.7649 0.0644,0.3217 -0.0509,0.6799 -0.0509,1.0198 0,0.306 -0.0222,0.6255 0.0509,0.9179 0.0799,0.3195 0.3077,0.6043 0.408,0.9178 0.0356,0.1114 0.0868,0.3204 0,0.357 -0.2361,0.0994 -0.6477,0.0172 -0.9689,0.051 -0.3247,0.0341 -0.651,0.0786 -0.9688,0.1529 -0.4811,0.1126 -0.9791,0.2142 -1.4278,0.408 -0.2992,0.1292 -0.5134,0.4502 -0.8158,0.5609 -0.3945,0.1443 -0.8475,0.166 -1.2748,0.204 -0.3376,0.03 -0.7159,0.0868 -1.0199,0 -0.1719,-0.0492 -0.2958,-0.2538 -0.4079,-0.408 -0.1598,-0.2197 -0.2481,-0.6539 -0.4079,-0.7139 -0.1122,-0.042 -0.2995,0.2513 -0.408,0.408 -0.1974,0.2852 -0.2867,0.6723 -0.5099,0.9178 -0.1167,0.1284 -0.331,0.1823 -0.5099,0.204 -0.382,0.0463 -0.7829,-0.0186 -1.1728,0 -0.3239,0.0154 -0.7261,0.2031 -0.9689,0.102 -0.1651,-0.0689 -0.1539,-0.4158 -0.2549,-0.6119 -0.188,-0.3649 -0.3826,-0.7311 -0.6119,-1.0709 -0.2296,-0.34 -0.4253,-0.7778 -0.7649,-0.9688 -0.4763,-0.2679 -1.1304,-0.2443 -1.6827,-0.4079 -0.3656,-0.1083 -0.703,-0.3541 -1.0709,-0.408 -0.329,-0.0481 -0.6793,0.0748 -1.0198,0.102 -0.5093,0.0408 -1.1013,-0.0671 -1.5297,0.102 -0.2175,0.0858 -0.3036,0.428 -0.408,0.6629 -0.0996,0.224 -0.1636,0.472 -0.2039,0.7139 -0.0277,0.1661 0.102,0.3939 0,0.5099 -0.2719,0.3089 -0.7709,0.4822 -1.1219,0.7649 -0.2609,0.2102 -0.4214,0.5939 -0.7139,0.7139 -0.3704,0.1519 -0.9614,-0.08 -1.2747,0.1019 -0.2136,0.124 -0.3407,0.5644 -0.306,0.8159 0.0333,0.2414 0.3022,0.4828 0.5099,0.6629 0.3022,0.2619 0.6564,0.5883 1.0199,0.6629 0.2993,0.0614 0.6411,-0.1962 0.9688,-0.255 0.3352,-0.0601 0.7129,-0.1908 1.0198,-0.102 0.339,0.0982 0.5869,0.4892 0.9179,0.6629 0.3489,0.1832 0.7398,0.346 1.1218,0.408 0.2469,0.04 0.5094,-0.102 0.7649,-0.102 0.3394,0 0.7287,-0.035 1.0198,0.102 0.2868,0.1349 0.5509,0.4358 0.7139,0.7139 0.1259,0.2148 0.1332,0.5082 0.153,0.7648 0.0142,0.1853 -0.08,0.3798 -0.051,0.5609 0.039,0.2438 0.149,0.4856 0.2549,0.7139 0.115,0.2477 0.2351,0.5051 0.408,0.7139 0.2351,0.2841 0.6646,0.4624 0.8158,0.7649 0.1037,0.2074 0.0483,0.5435 -0.0509,0.7649 -0.1218,0.2715 -0.3947,0.4886 -0.6119,0.7139 -0.2418,0.2506 -0.6445,0.4214 -0.7649,0.7138 -0.1176,0.2855 0.0425,0.6797 0.051,1.0199 0.0085,0.3397 0.1886,0.7604 0,1.0198 -0.6272,0.8624 -1.5601,1.7192 -2.4476,2.3456 -0.2683,0.1894 -0.6791,0.0854 -1.0199,0.102 -0.356,0.0174 -0.7436,-0.0892 -1.0708,0 -0.2337,0.0638 -0.3923,0.3348 -0.6119,0.4589 -0.1713,0.0969 -0.4207,0.2704 -0.5609,0.204 -0.1828,-0.0866 -0.2131,-0.5389 -0.4079,-0.6629 -0.1792,-0.114 -0.5342,-0.1361 -0.7139,-0.051 -0.1432,0.0678 -0.2271,0.3284 -0.255,0.5099 -0.04,0.2604 0.051,0.5439 0.051,0.8159 0,0.2889 -0.0191,0.5795 -0.051,0.8669 -0.036,0.3245 -0.1838,0.66 -0.153,0.9688 0.0202,0.2012 0.1839,0.3874 0.306,0.5609 0.2009,0.2855 0.5058,0.5089 0.6629,0.8159 0.2168,0.4238 0.3968,0.9067 0.4589,1.3768 0.0569,0.4307 0.0224,0.9143 -0.102,1.3258 -0.0966,0.3194 -0.3172,0.6412 -0.5609,0.8668 -0.2152,0.1993 -0.6875,0.1832 -0.8159,0.4079 -0.1435,0.2513 0.044,0.6859 0,1.0199 -0.041,0.3119 -0.142,0.6242 -0.2549,0.9178 -0.057,0.1483 -0.2759,0.2757 -0.255,0.408 0.0301,0.1907 0.2371,0.4114 0.408,0.5609 0.237,0.2074 0.6643,0.2732 0.8158,0.5099 0.1205,0.1882 -0.0394,0.515 0,0.7649 0.0626,0.396 0.0968,0.9846 0.306,1.1728 0.1308,0.1177 0.4679,-0.2058 0.7139,-0.255 0.3489,-0.0698 0.7528,-0.1762 1.0708,-0.102 0.1919,0.0448 0.3911,0.2707 0.4589,0.459 0.0852,0.2366 0.1112,0.6021 0,0.8158 -0.1098,0.2112 -0.4601,0.2842 -0.6629,0.459 -0.2901,0.2501 -0.5949,0.5107 -0.8158,0.8158 -0.136,0.1878 -0.2267,0.4366 -0.255,0.6629 -0.0227,0.1817 0.0045,0.4147 0.102,0.5609 0.1064,0.1597 0.3231,0.2758 0.5099,0.357 0.2042,0.0887 0.5019,0.0258 0.6629,0.1529 0.1619,0.1279 0.3463,0.4346 0.3059,0.6119 -0.0446,0.1966 -0.3457,0.385 -0.5609,0.51 -0.3117,0.181 -0.7331,0.2094 -1.0198,0.4079 -0.1552,0.1075 -0.3392,0.3687 -0.3059,0.5099 0.0347,0.1478 0.3498,0.2255 0.5099,0.357 0.3158,0.2594 0.8107,0.5658 0.9178,0.8158 0.0458,0.1069 -0.2987,0.1863 -0.4589,0.255 -0.1968,0.0843 -0.398,0.1956 -0.6119,0.204 -1.9617,0.0766 -4.2205,-0.6141 -5.9151,0.0509 -1.4669,0.5758 -2.477,2.3686 -3.5694,3.6715 -0.7603,0.9068 -1.2552,2.0406 -1.9887,2.9575 -0.2183,0.2729 -0.563,0.4323 -0.8668,0.6119 -0.4441,0.2624 -0.9327,0.4515 -1.3768,0.7139 -0.3038,0.1795 -0.7637,0.5579 -1.0797,0.7031l0.0437 0.0602c-0.3461,-0.4845 -0.9004,-0.9022 -1.0382,-1.4535 -0.2082,-0.833 -0.3307,-1.9794 0,-2.6992 0.2576,-0.5606 1.3579,-0.5958 1.7649,-1.142 0.9081,-1.2187 1.5219,-2.7464 2.1802,-4.1528 0.103,-0.2201 0.0403,0.028 0.1038,-0.1975 0.3035,-1.0779 -0.9854,-2.0215 -1.7589,-3.1206 -0.3217,-0.4572 0.2387,-2.9529 0.0978,-4.2606 -0.1014,-0.9417 -0.8992,-1.7655 -1.142,-2.6992 -0.2071,-0.7966 -0.0365,-1.6789 -0.2076,-2.4917 -0.3826,-1.8173 -1.1815,-3.6456 -1.4535,-5.3985 -0.0394,-0.2542 0.4432,-0.3801 0.5191,-0.6229 0.0972,-0.3109 -0.1493,-0.7956 0,-1.0382 0.1276,-0.2073 0.6437,-0.3862 0.8306,-0.3115 0.1592,0.0637 0.0642,0.7398 0.2076,0.7268 0.2372,-0.0216 0.64,-0.5362 0.9344,-0.8306 0.3502,-0.3502 0.6128,-0.8856 0.9633,-1.2117l0 0c0.1168,-0.1087 0.2435,-0.1941 0.3863,-0.2417 0.7782,-0.2594 2.5237,0.2668 3.1226,-0.3195 1.6911,-1.6557 2.5005,-2.1937 3.5218,-3.3142 0.3824,-0.4195 -0.8755,-1.1321 -1.0382,-1.7649 -0.1488,-0.5784 -0.1361,-1.3376 0.1038,-1.8687 0.2446,-0.5417 1.0395,-0.8206 1.3496,-1.3496 0.2782,-0.4746 0.5842,-1.1664 0.4153,-1.6611 -0.3155,-0.9241 -1.2293,-1.7429 -1.8687,-2.5955 -0.3988,-0.5316 -1.219,-0.9281 -1.2458,-1.5572 -0.0479,-1.1222 -0.0193,-2.2109 0,-3.3222 0.0065,-0.3782 1.0647,0.0998 1.4534,-0.1038 0.3381,-0.1771 0.6599,-0.6369 0.7267,-1.0382 0.1754,-1.0521 -0.1832,-3.1862 0,-3.3222 1.8679,-1.3855 1.7967,-2.3399 2.9069,-3.0107 0.5509,-0.3328 1.4141,-0.1454 2.0764,0 0.7566,0.1661 1.4821,0.8621 2.1802,0.9343 0.3055,0.0316 0.567,-0.3999 0.8305,-0.6229 0.1864,-0.1577 0.3933,-0.3131 0.5191,-0.5191 0.2548,-0.4169 0.2612,-1.0747 0.6229,-1.3496 0.5034,-0.3826 1.5886,-0.1722 1.9726,-0.6229 0.4119,-0.4836 0.065,-1.5965 0.4153,-2.1802 0.2726,-0.4544 0.9232,-0.7633 1.4534,-0.9343 0.5425,-0.1751 1.2986,0.186 1.7649,-0.1039 0.8141,-0.506 1.2577,-1.7885 2.0764,-2.284 0.4964,-0.3004 1.3288,-0.3102 1.8687,-0.1038 0.6367,0.2435 1.1443,1.2467 1.6611,1.4535 0.1753,0.0701 0.3592,-0.3874 0.4153,-0.6229 0.1169,-0.4912 0.1038,-1.0399 0.1038,-1.5573 0,-0.2094 -0.1829,-0.4517 -0.1038,-0.6229 0.1286,-0.2787 0.4632,-0.7267 0.7267,-0.7267 0.3248,0 0.7426,0.8252 1.0382,0.7267 0.4311,-0.1437 0.7613,-0.969 1.142,-1.4535l0.0508 -0.1421z" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="niederoesterreich" + class="fil0" + d="M190.861 45.2135c0.1275,-0.0537 0.0434,-0.4075 0.0509,-0.6119 0.0095,-0.2546 -0.0185,-0.511 0,-0.7649 0.0325,-0.443 0.1363,-0.8825 0.153,-1.3258 0.0173,-0.4576 -0.0883,-0.9216 -0.051,-1.3767 0.0477,-0.5817 0.1151,-1.1929 0.306,-1.7338 0.115,-0.3259 0.3613,-0.6234 0.6119,-0.8668 0.3443,-0.3345 0.7792,-0.5816 1.1728,-0.8669 0.2863,-0.2076 0.6844,-0.3342 0.8668,-0.6119 0.2085,-0.3172 0.2036,-0.782 0.306,-1.1728 0.0846,-0.323 0.0727,-0.7461 0.255,-0.9688 0.1237,-0.1513 0.4384,-0.1699 0.6629,-0.153 1.3563,0.1021 3.0511,0.7155 4.0793,0.5099 0.3316,-0.0663 -0.0076,-0.884 0,-1.3258 0.0094,-0.544 0.0421,-1.0877 0.051,-1.6317 0.0081,-0.4928 -0.0617,-0.9959 0,-1.4788 0.0403,-0.3159 0.2264,-0.6058 0.3059,-0.9178 0.1415,-0.5548 0.3211,-1.1173 0.357,-1.6828 0.0321,-0.5053 -0.0931,-1.0209 -0.153,-1.5297 -0.0421,-0.358 -0.1374,-0.7121 -0.153,-1.0708 -0.0184,-0.4232 -0.0329,-0.8648 0.051,-1.2748 0.0691,-0.3379 0.195,-0.7115 0.408,-0.9689 0.1949,-0.2355 0.5109,-0.4789 0.8158,-0.5099 0.6979,-0.071 1.4609,0.1494 2.1927,0.204 0.407,0.0303 0.8368,-0.0434 1.2238,0.051 0.3099,0.0755 0.6634,0.2254 0.8668,0.4589 0.2556,0.2934 0.4148,0.7317 0.5099,1.1218 0.0749,0.3068 -0.1101,0.6892 0,0.9689 0.1108,0.2812 0.4076,0.6382 0.6629,0.7138 0.2036,0.0604 0.4673,-0.2312 0.7139,-0.3059 0.3144,-0.0953 0.6421,-0.1817 0.9689,-0.204 0.4211,-0.0287 1.0172,0.235 1.2748,0.051 0.2183,-0.156 0.0338,-0.7373 0.1529,-1.0708 0.1359,-0.3803 0.3328,-0.9718 0.6119,-1.0708 0.2478,-0.088 0.6307,0.4665 0.9689,0.5099 0.3247,0.0416 0.7027,-0.3119 1.0198,-0.255 0.3457,0.0621 0.6383,0.4209 0.9689,0.6119 0.4343,0.251 0.8719,0.5028 1.3257,0.7139 0.2771,0.1289 0.569,0.2754 0.8669,0.306 0.365,0.0374 0.8203,-0.2126 1.1218,-0.102 0.2084,0.0764 0.2341,0.4732 0.408,0.6629 0.387,0.4222 0.811,0.8363 1.2748,1.1728 0.4031,0.2924 0.8623,0.5364 1.3257,0.7139 0.3355,0.1284 0.7112,0.165 1.0709,0.2039 0.2692,0.0291 0.5789,-0.0947 0.8158,0 0.2731,0.1092 0.4831,0.4003 0.7139,0.6119 0.1771,0.1623 0.344,0.3361 0.5099,0.5099 0.191,0.2001 0.3037,0.5642 0.561,0.6119 0.9325,0.1732 2.0149,0.0811 3.0085,0.051 0.1282,-0.0038 0.2751,-0.0602 0.3569,-0.1529 0.1732,-0.1963 0.1927,-0.5889 0.4079,-0.7139 0.3117,-0.181 0.7841,-0.1781 1.1729,-0.204 0.1212,-0.0081 0.2563,0.0304 0.3569,0.102 2.7889,1.9851 5.5056,4.1229 8.3116,6.068 0.1855,0.1286 0.4366,0.148 0.6629,0.153 2.8842,0.063 5.7794,0.0213 8.6686,0.051 0.4253,0.0043 0.8633,0.1098 1.2748,0.051 0.3024,-0.0432 0.6354,-0.1668 0.8669,-0.357 0.2445,-0.2008 0.4382,-0.5179 0.5609,-0.8158 0.1153,-0.28 0.1266,-0.6099 0.153,-0.9179 0.0246,-0.2869 -0.0717,-0.5982 0,-0.8668 0.0643,-0.2413 0.2107,-0.5515 0.4079,-0.6629 0.1938,-0.1096 0.5101,-0.0075 0.7649,0 0.3231,0.0095 0.6497,0.0813 0.9688,0.0509 0.3948,-0.0375 0.7912,-0.2815 1.1728,-0.2549 0.3493,0.0244 0.6934,0.2447 1.0199,0.4079 0.3534,0.1768 0.6541,0.4813 1.0198,0.6119 0.3482,0.1244 0.7465,0.1234 1.1218,0.153 0.2705,0.0214 0.5813,-0.0902 0.8159,0 0.2074,0.0797 0.3821,0.311 0.5099,0.5099 0.1781,0.277 0.3145,0.6001 0.408,0.9179 0.0765,0.2601 -0.0463,0.7024 0.1019,0.8158 0.1407,0.1076 0.5078,-0.1233 0.7649,-0.1529 0.1849,-0.0214 0.374,0 0.5609,0 0.238,0 0.4921,-0.0598 0.7139,0 0.2201,0.0592 0.4363,0.2042 0.6119,0.3569 0.2153,0.1872 0.3245,0.5403 0.5609,0.6629 0.2226,0.1154 0.5436,0.0432 0.8159,0.051 0.3227,0.0092 0.6537,0.0525 0.9688,0 0.3988,-0.0665 0.7776,-0.2556 1.1728,-0.357 0.2677,-0.0686 0.5659,-0.2047 0.8159,-0.1529 0.2429,0.0502 0.4998,0.2569 0.6629,0.4589 0.1938,0.24 0.3051,0.5663 0.4079,0.8669 0.1182,0.3453 0.1745,0.7128 0.255,1.0708 0.0724,0.3219 0.1522,0.6432 0.204,0.9688 0.0671,0.4223 0.0791,0.8538 0.1529,1.2748 0.0961,0.5478 0.246,1.0862 0.357,1.6318 0.093,0.4573 0.175,0.917 0.2549,1.3767 0.0561,0.3221 0.153,0.6477 0.153,0.9689 0,0.2227 -0.0694,0.454 -0.153,0.6629 -0.1204,0.3011 -0.2553,0.6153 -0.4589,0.8668 -0.3743,0.4624 -0.912,0.8043 -1.2748,1.2748 -0.2661,0.3453 -0.4563,0.7645 -0.6119,1.1728 -0.1164,0.3056 -0.1813,0.6412 -0.2039,0.9689 -0.0454,0.6582 0.0112,1.3261 0,1.9887 -0.0058,0.3402 0.0439,0.7064 -0.051,1.0198 -0.075,0.2475 -0.3634,0.4197 -0.459,0.6629 -0.0914,0.2327 -0.1527,0.5279 -0.1019,0.7649 0.0512,0.239 0.2283,0.4833 0.4079,0.6629 0.2284,0.2283 0.549,0.3668 0.8159,0.5609 0.294,0.2139 0.6686,0.3853 0.8668,0.6629 0.1417,0.1983 0.0828,0.5152 0.153,0.7648 0.0827,0.2943 0.1492,0.6111 0.3059,0.8669 0.1662,0.2711 0.4063,0.5235 0.6629,0.7139 0.2703,0.2005 0.6904,0.2314 0.9179,0.4589 0.1974,0.1974 0.2999,0.531 0.3569,0.8159 0.062,0.31 -0.0169,0.6468 0,0.9688 0.0171,0.3239 0.0221,0.6573 0.102,0.9689 0.0901,0.3513 0.3319,0.6683 0.4079,1.0198 0.06,0.2774 -0.0755,0.6025 0,0.8669 0.0605,0.2115 0.2349,0.4135 0.408,0.5609 0.2859,0.2435 0.6696,0.3773 0.9688,0.6119 0.3297,0.2584 0.608,0.5821 0.9179,0.8668 0.319,0.2932 0.7765,0.6508 1.0696,0.9677l-0.0508 0.1421c-0.3807,0.4845 -0.7109,1.3098 -1.142,1.4535 -0.2956,0.0985 -0.7134,-0.7267 -1.0382,-0.7267 -0.2635,0 -0.5981,0.448 -0.7267,0.7267 -0.0791,0.1712 0.1038,0.4135 0.1038,0.6229 0,0.5174 0.0131,1.0661 -0.1038,1.5573 -0.0561,0.2355 -0.24,0.693 -0.4153,0.6229 -0.5168,-0.2068 -1.0244,-1.21 -1.6611,-1.4535 -0.5399,-0.2064 -1.3723,-0.1966 -1.8687,0.1038 -0.8187,0.4955 -1.2623,1.778 -2.0764,2.284 -0.4663,0.2899 -1.2224,-0.0712 -1.7649,0.1039 -0.5302,0.171 -1.1808,0.4799 -1.4534,0.9343 -0.3503,0.5837 -0.0034,1.6966 -0.4153,2.1802 -0.384,0.4507 -1.4692,0.2403 -1.9726,0.6229 -0.3617,0.2749 -0.3681,0.9327 -0.6229,1.3496 -0.1258,0.206 -0.3327,0.3614 -0.5191,0.5191 -0.2635,0.223 -0.525,0.6545 -0.8305,0.6229 -0.6981,-0.0722 -1.4236,-0.7682 -2.1802,-0.9343 -0.6623,-0.1454 -1.5255,-0.3328 -2.0764,0 -1.1102,0.6708 -1.039,1.6252 -2.9069,3.0107 -0.1832,0.136 0.1754,2.2701 0,3.3222 -0.0668,0.4013 -0.3886,0.8611 -0.7267,1.0382 -0.3887,0.2036 -1.4469,-0.2744 -1.4534,0.1038 -0.0193,1.1113 -0.0479,2.2 0,3.3222 0.0268,0.6291 0.847,1.0256 1.2458,1.5572 0.6394,0.8526 1.5532,1.6714 1.8687,2.5955 0.1689,0.4947 -0.1371,1.1865 -0.4153,1.6611 -0.3101,0.529 -1.105,0.8079 -1.3496,1.3496 -0.2399,0.5311 -0.2526,1.2903 -0.1038,1.8687 0.1627,0.6328 1.4206,1.3454 1.0382,1.7649 -1.0213,1.1205 -1.8307,1.6585 -3.5218,3.3142 -0.5989,0.5863 -2.3444,0.0601 -3.1226,0.3195 -0.1428,0.0476 -0.2695,0.133 -0.3863,0.2417l-0.0348 -0.0805c-0.3175,-0.8114 -0.5111,-1.7139 -0.9525,-2.4341 -0.2289,-0.3734 -0.6603,-0.7381 -1.0583,-0.8467 -0.3781,-0.1031 -0.8833,0.2762 -1.27,0.2117 -0.2483,-0.0414 -0.3967,-0.3967 -0.635,-0.5291 -0.3966,-0.2204 -0.8283,-0.4443 -1.2699,-0.5292 -0.4756,-0.0915 -0.9967,0.0606 -1.4817,0 -0.3616,-0.0452 -0.8478,-0.0575 -1.0583,-0.3175 -0.3892,-0.4809 -0.3515,-1.4241 -0.7408,-1.9049 -0.2104,-0.26 -0.7216,-0.1732 -1.0583,-0.3175 -0.4041,-0.1732 -0.9937,-0.2942 -1.1641,-0.635 -0.2176,-0.4352 0.1383,-1.1862 0,-1.6933 -0.0734,-0.2689 -0.3782,-0.5323 -0.635,-0.635 -0.2724,-0.1089 -0.6641,-0.0961 -0.9525,0 -0.3466,0.1156 -0.6147,0.4903 -0.9524,0.635 -0.1562,0.0669 -0.448,0.1263 -0.5292,0 -0.2363,-0.3676 -0.3067,-0.982 -0.4233,-1.4816 -0.1304,-0.5587 -0.0771,-1.2125 -0.3175,-1.6933 -0.1477,-0.2953 -0.537,-0.4728 -0.8466,-0.635 -0.4313,-0.2259 -0.9212,-0.3432 -1.3758,-0.5291 -0.3215,-0.1315 -0.6611,-0.2393 -0.9525,-0.4234 -0.3789,-0.2392 -0.6452,-0.7666 -1.0583,-0.8466 -0.6805,-0.1317 -1.5284,0.3074 -2.2224,0.2117 -0.329,-0.0454 -0.5578,-0.4328 -0.8467,-0.635 -0.4166,-0.2917 -0.8156,-0.6279 -1.27,-0.8467 -0.4981,-0.2398 -1.1259,-0.2351 -1.5874,-0.5291 -0.7291,-0.4644 -0.9525,-1.3758 -1.0583,-1.7991 -0.1058,-0.4233 -0.5512,-0.5789 -1.27,-0.635 -0.5247,-0.0409 -1.0841,-0.0247 -1.5874,0.1058 -0.4492,0.1165 -0.8203,0.5351 -1.27,0.635 -0.5028,0.1117 -1.1126,-0.1445 -1.5874,0 -0.3366,0.1024 -0.6398,0.4373 -0.8467,0.7408 -0.3222,0.4726 -0.3505,1.2158 -0.7408,1.5875 -0.3505,0.3338 -0.9884,0.351 -1.4816,0.5291 -0.7767,0.2805 -1.5285,0.7194 -2.3283,0.8467 -0.7524,0.1197 -1.5526,-0.1059 -2.3283,-0.1059 -0.4943,0 -1.1104,-0.1362 -1.4816,0.1059 -0.4402,0.287 -0.548,1.0996 -0.9525,1.4816 -0.2305,0.2177 -0.6518,0.365 -0.9524,0.3175 -0.3696,-0.0584 -0.7114,-0.4142 -1.0583,-0.635 -0.4291,-0.2731 -0.8036,-0.6801 -1.27,-0.8466 -0.5214,-0.1863 -1.1273,-0.1935 -1.6933,-0.2117 -0.5276,-0.017 -1.0868,0.1773 -1.5874,0.1058 -0.2402,-0.0343 -0.5351,-0.2109 -0.635,-0.4233 -0.1823,-0.3873 -0.1585,-0.4268 -0.2117,-0.8874l0 0c-0.0527,-0.4566 -0.1525,-1.4125 -0.1058,-1.8642 0.0591,-0.5713 0.2296,-1.1475 0.4233,-1.6933 0.1944,-0.5478 0.5278,-1.0452 0.7408,-1.5874 0.1751,-0.4456 0.6257,-1.016 0.4233,-1.3758 -0.4325,-0.769 -1.4623,-1.5445 -2.3282,-2.0108 -0.5099,-0.2746 -1.2309,-0.0412 -1.7991,-0.2117 -0.4901,-0.147 -0.9678,-0.4299 -1.3758,-0.7408 -0.3328,-0.2535 -0.5241,-0.6836 -0.8467,-0.9524 -0.3124,-0.2604 -0.6849,-0.4813 -1.0583,-0.635 -0.2264,-0.0932 -0.5376,0.027 -0.7408,-0.1059 -0.7139,-0.4668 -1.3941,-1.0766 -2.0108,-1.6932 -0.4769,-0.4769 -1.3047,-1.0837 -1.2699,-1.5875 0.0358,-0.5192 0.9554,-1.0745 1.2629,-1.6456 0.1864,-0.3461 0.2824,-0.6916 0.2187,-1.106 -0.0774,-0.5028 -0.3686,-0.9756 -0.4233,-1.4816 -0.0864,-0.7993 -0.1493,-1.6522 0.1093,-2.3794 0.3058,-0.8602 0.8752,-1.7213 1.584,-2.1643 0.4201,-0.2626 1.155,-0.1577 1.6932,-0.007 0.3437,0.0962 0.7244,0.263 0.9525,0.5291 0.4068,0.4747 0.5287,1.2311 0.9525,1.6933 0.3523,0.3844 0.882,0.6887 1.3758,0.8467 0.3881,0.1242 0.8624,0.0998 1.2699,0 1.3211,-0.3235 2.7034,-0.688 3.9158,-1.27 0.5514,-0.2647 1.0134,-1.5041 1.5398,-1.8166 0.6024,-0.3577 0.9186,-0.2021 1.5734,-0.2488 0.333,-0.0238 1.6634,0.8732 1.9911,0.9118 0.272,0.032 0.0024,-0.6175 0.0267,-1.0282 0.0393,-0.6658 0.0883,-1.1709 0.0547,-1.9456 -0.0369,-0.848 -0.023,-1.9824 -0.157,-2.8132 -0.0424,-0.2628 -0.1649,-0.4264 -0.2082,-0.6862 -0.0625,-0.3752 -0.1479,-0.558 -0.164,-0.9455 -0.0191,-0.4592 0.0125,-0.9499 -0.1058,-1.3757 -0.0581,-0.2092 -0.354,-0.3213 -0.4234,-0.5292 -0.1423,-0.4271 0.031,-1.0585 -0.2116,-1.3758 -0.216,-0.2824 -0.6322,-0.3029 -0.9455,-0.5326 -0.2158,-0.1583 -0.5445,-0.367 -0.642,-0.6315 -0.1495,-0.4058 -0.2817,-0.841 -0.3175,-1.27 -0.0348,-0.4176 -0.1146,-0.9816 0.1059,-1.27 0.238,-0.3113 0.9948,-0.2539 1.2699,-0.5291 0.1482,-0.1482 0.1391,-0.5764 0,-0.7408 -0.2489,-0.2942 -0.7581,-0.4658 -1.1641,-0.635 -0.4407,-0.1836 -0.9207,-0.2716 -1.3758,-0.4233 -0.3916,-0.1305 -0.7833,-0.2647 -1.1641,-0.4233 -0.4659,-0.1941 -0.8924,-0.5222 -1.3758,-0.635 -0.5749,-0.1342 -1.2637,0.0726 -1.7991,-0.1059 -0.3113,-0.1037 -0.4939,-0.4938 -0.7408,-0.7408l0.1317 0.005z" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="pathwhatever" + class="fil0" + d="M247.243 57.4849c0.4589,-0.0689 1.004,-0.0149 1.3758,-0.2117 0.2279,-0.1207 0.2074,-0.6411 0.4234,-0.7408 0.2426,-0.112 0.6854,-0.0411 0.9524,0.1058 0.4385,0.2412 0.8116,0.6787 1.1642,1.0583 0.106,0.1142 0.0904,0.4112 0.2116,0.4233 0.2316,0.0232 0.5709,-0.3347 0.8467,-0.3175 0.2886,0.0181 0.6713,0.1896 0.8466,0.4234 0.248,0.3306 0.2461,0.8623 0.4233,1.2699 0.1756,0.4038 0.5748,0.7626 0.635,1.1642 0.0456,0.304 -0.2685,0.6257 -0.3175,0.9524 -0.0568,0.3789 -0.0519,0.7831 0,1.1642 0.0539,0.395 0.1965,0.781 0.3175,1.1641 0.0907,0.2871 0.4286,0.672 0.3175,0.8466 -0.1358,0.2134 -0.6949,0.2962 -1.0583,0.3175 -0.836,0.0492 -1.7174,-0.1829 -2.5399,-0.1058 -0.3063,0.0287 -0.6035,0.2322 -0.8467,0.4233 -0.2506,0.197 -0.3705,0.6086 -0.6349,0.7408 -0.2295,0.1148 -0.5818,0.0736 -0.8467,0 -0.3701,-0.1028 -0.6957,-0.4909 -1.0583,-0.5291 -0.3077,-0.0324 -0.624,0.2796 -0.9525,0.3175 -0.5886,0.0679 -1.1999,0.0176 -1.7991,0 -0.6002,-0.0177 -1.2692,0.0849 -1.7991,-0.1059 -0.352,-0.1267 -0.686,-0.5074 -0.8466,-0.8466 -0.1569,-0.3311 -0.1261,-0.7804 -0.1059,-1.1641 0.0151,-0.2865 0.2727,-0.5873 0.2117,-0.8467 -0.0801,-0.3403 -0.5477,-0.6034 -0.635,-0.9524 -0.0891,-0.3565 -0.0058,-0.8069 0.1058,-1.1642 0.0648,-0.2071 0.2331,-0.5038 0.4234,-0.5291 0.3388,-0.0452 0.7834,0.3175 1.1641,0.3175 0.2543,0 0.5506,-0.1386 0.7408,-0.3175 0.4095,-0.3855 0.6718,-0.9486 1.0583,-1.3758 0.2838,-0.3137 0.6413,-0.5577 0.9525,-0.8467 0.1827,-0.1696 0.3175,-0.4233 0.5291,-0.5291 0.2117,-0.1058 0.4942,-0.0688 0.7408,-0.1058z" + nodetypes="cssssssssssssssssssssssssssssssssss" /> + </g> + <g + id="Grenzen_x0020_Bundeslaender"> + <metadata + id="CorelCorpID_1Corel-Layer" /> + <path + id="path13825" + class="fil1 str0" + d="M129.095 76.1244c0.331,-0.1655 0.7175,-0.2619 0.993,-0.4966 0.3629,-0.3091 0.6102,-0.7605 0.9222,-1.1349 0.1609,-0.1931 0.2667,-0.5145 0.4965,-0.5675 0.6923,-0.1598 1.5132,-0.0552 2.2699,-0.0709 0.3782,-0.0079 0.8019,-0.129 1.135,0 0.3999,0.1548 0.7275,0.5472 1.064,0.8512 0.3965,0.3581 0.6896,0.8804 1.135,1.1349 0.3822,0.2184 0.8936,0.2232 1.3477,0.2838 0.6099,0.0813 1.2354,0.1702 1.8443,0.1419 0.4078,-0.019 0.8248,-0.1333 1.2059,-0.2838 0.5174,-0.2042 0.9646,-0.6986 1.4897,-0.7803 0.5389,-0.0838 1.1606,0.1182 1.7024,0.2838 0.3094,0.0945 0.5889,0.3032 0.8512,0.4965 0.1869,0.1378 0.461,0.3069 0.4965,0.4966 0.0354,0.1886 -0.1041,0.5241 -0.2837,0.6384 -0.3406,0.2167 -0.8455,0.3444 -1.2768,0.3546 -0.5618,0.0134 -1.2433,-0.3543 -1.7024,-0.2837 -0.1557,0.0239 -0.1232,0.3742 -0.1419,0.5675 -0.0522,0.5397 -0.0492,1.0876 -0.071,1.6315 -0.0255,0.6383 -0.1474,1.2905 -0.0709,1.9152 0.0654,0.5339 0.3168,1.0454 0.4966,1.5606 0.1749,0.5015 0.2838,1.0642 0.5674,1.4896 0.1893,0.284 0.5219,0.5624 0.8513,0.6384 0.5928,0.1368 1.2836,-0.0631 1.9152,0 0.5506,0.0551 1.0868,0.2407 1.6315,0.3547 0.472,0.0988 0.9425,0.2105 1.4187,0.2837 0.446,0.0687 0.9593,-0.0246 1.3477,0.1419 0.2736,0.1172 0.5829,0.4592 0.6385,0.7094 0.0389,0.1754 -0.1564,0.5344 -0.3547,0.5674 -0.6529,0.1088 -1.5014,-0.2134 -2.199,-0.1418 -0.2246,0.023 -0.5675,0.2417 -0.5675,0.4256 0,0.3126 0.2895,0.7967 0.5675,1.064 0.3368,0.3238 0.8248,0.5631 1.2768,0.7093 0.3519,0.1139 0.9054,-0.1046 1.135,0.071 0.1724,0.1318 0.1285,0.5777 0.0709,0.8512 -0.1316,0.625 -0.3557,1.2654 -0.6384,1.8443 -0.2138,0.4378 -0.7752,0.7751 -0.8512,1.2059 -0.0659,0.3732 0.2876,0.8026 0.4256,1.2059 0.1694,0.4952 0.5373,1.0278 0.4965,1.4896 -0.0301,0.3421 -0.5662,0.5764 -0.7093,0.9222 -0.1407,0.3399 -0.0873,0.7636 -0.1419,1.1349 -0.1086,0.7387 0.0331,1.0491 0.2172,1.4057 0.1943,0.3764 0.5948,0.5034 0.9178,0.7933 0.5991,0.5377 1.5482,1.1811 2.2535,1.5402" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path6054" + class="fil1 str0" + d="M35.9465 111.048c0.0654,0.5064 0.1148,1.0154 0.1961,1.5192 0.0821,0.509 0.2363,1.0083 0.294,1.5192 0.0567,0.5019 0.1365,1.028 0.049,1.5192 -0.1249,0.7013 -0.3677,1.4216 -0.6861,2.0583 -0.2044,0.4088 -0.5723,0.733 -0.8821,1.0782 -0.262,0.2919 -0.6919,0.4957 -0.8331,0.8331 -0.1528,0.3651 -0.0099,0.8515 -0.049,1.2742 -0.0426,0.4594 -0.0405,0.9512 -0.196,1.3721 -0.1222,0.3305 -0.5522,0.5493 -0.6371,0.8822 -0.1111,0.4349 -0.0072,0.9528 0.049,1.4212 0.0418,0.3484 0.2373,0.6835 0.245,1.0291 0.0087,0.3895 -0.0405,0.8285 -0.196,1.1762 -0.1222,0.273 -0.3857,0.5094 -0.6371,0.6861 -0.3531,0.2481 -0.9943,0.288 -1.1762,0.588 -0.1448,0.2391 0.0533,0.7178 0.1961,1.0292 0.2166,0.4727 0.7147,0.8362 0.8821,1.3232 0.192,0.5585 0.1488,1.2152 0.196,1.8132 0.0018,0.0228 -0.0327,0.0327 -0.049,0.049" + nodetypes="cssssssssssssssssss" /> + <path + id="path7025_4" + class="fil1 str0" + d="M118.425 93.307c0.1306,0.5881 0.0578,1.3139 0.392,1.7643 0.4173,0.5624 1.2812,0.8048 1.8623,1.2742 0.2683,0.2167 0.6107,0.4702 0.6861,0.7841 0.1207,0.5029 -0.206,1.1444 -0.098,1.6662 0.088,0.4257 0.5531,0.7582 0.686,1.1762 0.0958,0.3008 0.1139,0.6823 0,0.9801 -0.3108,0.813 -0.8833,1.552 -1.2741,2.3523 -0.2953,0.6045 -0.4698,1.2706 -0.7841,1.8623 -0.2411,0.4538 -0.4797,1.0166 -0.8822,1.2742 -0.4143,0.2651 -1.046,0.1929 -1.5682,0.294 -0.4906,0.095 -1.0724,0.0519 -1.4702,0.294 -0.3537,0.2153 -0.5683,0.6929 -0.7841,1.0782 -0.2416,0.4315 -0.2271,1.1084 -0.5881,1.3722 -0.4885,0.357 -1.2998,0.3835 -1.9602,0.4901 -0.3524,0.0568 -0.7434,0.0976 -1.0782,0 -0.4493,-0.1311 -0.8317,-0.5856 -1.2742,-0.6861 -0.2763,-0.0628 -0.625,0.0546 -0.8821,0.196 -0.3963,0.218 -0.6591,0.7057 -1.0781,0.8821 -0.8225,0.3463 -1.7624,0.4651 -2.6464,0.6861 -0.4228,0.1057 -0.8435,0.2479 -1.2742,0.294 -0.4841,0.0519 -1.0089,-0.1002 -1.4702,0 -0.2901,0.0631 -0.6742,0.2428 -0.7841,0.4901 -0.1514,0.3408 0.0752,0.8605 0,1.2742 -0.1208,0.6645 -0.4516,1.2949 -0.5881,1.9603 -0.1249,0.6088 -0.2311,1.2485 -0.196,1.8622 0.0303,0.5298 0.1261,1.1591 0.3921,1.5682 0.1588,0.2443 0.6358,0.2074 0.8821,0.3921 0.1458,0.1093 0.2512,0.3066 0.294,0.4901 0.1859,0.7966 0.2614,1.6335 0.3921,2.4503 0.098,0.6126 0,0 0,0" + nodetypes="cssssssssssssssssssssssssssssss" /> + <path + id="path7996_5" + class="fil1 str0" + d="M120.342 120.766c0.0056,0.3305 -0.0975,0.7073 0.0431,0.9652 0.2045,0.3749 0.6651,0.7051 1.0782,0.8821 0.5017,0.215 1.1495,0.1027 1.6662,0.294 0.3654,0.1354 0.7311,0.3904 0.9801,0.6861 0.2738,0.3251 0.6132,0.7749 0.5881,1.1762 -0.0402,0.6442 -0.6917,1.3139 -0.7841,1.9603 -0.0383,0.2684 0.2722,0.5178 0.3921,0.7841 0.1742,0.3871 0.2267,0.8664 0.49,1.1761 0.2921,0.3437 0.8502,0.4581 1.1762,0.7842 0.2947,0.2947 0.5617,0.6801 0.6861,1.0781 0.2023,0.6475 0.0595,1.4269 0.294,2.0583 0.1902,0.5121 0.5979,0.9626 0.9802,1.3722 0.9899,1.0606 2.2979,1.9379 3.1364,3.0384 0.207,0.2717 0,0.7188 0,1.0781 0,0.2614 0.1399,0.7842 0,0.7842 -0.2522,0 -0.7529,-0.6001 -1.1762,-0.7842 -0.3281,-0.1426 -0.7338,-0.2597 -1.0781,-0.196 -0.5378,0.0996 -1.0296,0.5066 -1.5682,0.6861 -0.4416,0.1472 -0.9097,0.2445 -1.3722,0.2941 -0.4523,0.0484 -0.9191,-0.0394 -1.3722,0 -0.2984,0.0259 -1.1967,-0.033 -1.1762,0.196 0.0583,0.6482 0.0531,1.7304 -0.196,2.5483 -0.2836,0.7267 -1.0781,1.5682 -1.4702,2.2543" + nodetypes="cssssssssssssssssssssssssssssssscss" /> + <path + id="path7996_6" + class="fil1 str0" + d="M106.565 122.417c0.8168,-0.2614 1.7414,-0.3518 2.4504,-0.7841 0.6305,-0.3845 1.0581,-1.0995 1.5682,-1.6663 0.372,-0.4134 0.6299,-1.041 1.0781,-1.2741 0.3685,-0.1917 0.9181,-0.0364 1.3722,0 0.3627,0.029 0.7423,0.26 1.0782,0.196 0.3502,-0.0667 0.6355,-0.5881 0.9801,-0.5881 0.5049,0 1.0282,0.4735 1.5682,0.5881 0.5382,0.1141 1.1241,0.0012 1.6662,0.098 0.3727,0.0665 0.7831,0.1707 1.0782,0.3921 0.3583,0.2687 0.7117,0.6692 0.8821,1.0781 0.039,0.0938 0.0531,0.1988 0.0549,0.309" + nodetypes="cssssssssssssssssssssssssssssssscss" /> + <path + id="path8967" + class="fil1 str0" + d="M160.34 128.635c0.6067,0.6167 1.0021,1.245 1.6936,1.7113 0.3607,0.2433 0.8879,0.3072 1.3214,0.2937 0.3495,-0.0109 0.7735,-0.1303 1.0278,-0.3671 0.4554,-0.4239 0.6228,-1.2142 1.1011,-1.615 0.4271,-0.3578 1.2182,-0.2879 1.6151,-0.6607 0.4106,-0.3858 0.4659,-1.1311 0.8075,-1.615 0.2457,-0.3481 0.5846,-0.6614 0.9543,-0.8809 1.1964,-0.7104 2.4401,-1.4591 3.7439,-1.9087 0.8251,-0.2845 1.8511,-0.4949 2.6428,-0.2937 0.6521,0.1658 1.0561,1.066 1.6885,1.3948 0.5912,0.3075 1.3183,0.3559 1.982,0.5139 0.3641,0.0867 0.7919,0.0389 1.1012,0.2202 0.4003,0.2347 0.6337,0.7853 1.0278,1.0278 0.2421,0.149 0.618,0.2564 0.8809,0.1468 0.9117,-0.3799 1.6742,-1.378 2.6428,-1.615 1.3316,-0.3259 2.8385,-0.0734 4.2578,-0.0734 1.615,0 3.265,0.2507 4.8451,0.0734 0.818,-0.0918 1.5641,-0.5926 2.3491,-0.8809 0.4141,-0.1521 0.8419,-0.4832 1.248,-0.4405 0.5238,0.0551 1.1398,0.3435 1.5416,0.7341 1.3601,1.3223 2.6077,2.8652 3.7439,4.4046 0.381,0.5161 0.611,1.1558 0.8075,1.7619 0.0971,0.2993 0.1248,0.6462 0.0734,0.9543 -0.071,0.426 -0.2352,0.8649 -0.4404,1.248 -0.1618,0.302 -0.5983,0.4956 -0.6607,0.8075 -0.0844,0.4222 0.0312,0.9814 0.2202,1.3948 0.2026,0.4431 0.7548,0.7285 0.9544,1.1746 0.2164,0.4838 0.236,1.0716 0.2936,1.615 0.1137,1.0717 -0.2392,2.3466 0.2202,3.2301 0.4949,0.9517 1.7619,1.5171 2.6428,2.2757" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path8967_7" + class="fil1 str0" + d="M120.336 120.803c0.2447,-0.0979 0.5531,-0.124 0.7341,-0.2937 0.2105,-0.1973 0.2047,-0.7485 0.4405,-0.8075 0.3515,-0.0878 0.9174,0.1651 1.3213,0.3671 0.6238,0.3119 1.1622,0.8033 1.7619,1.1746 0.4281,0.265 0.847,0.6098 1.3214,0.7341 0.5534,0.1449 1.1766,0.0229 1.7618,0.0734 0.8341,0.0719 1.6966,0.0756 2.496,0.2936 0.8156,0.2224 1.6304,0.5854 2.3491,1.0278 0.5537,0.3407 0.8838,1.1088 1.4682,1.3213 0.7615,0.2769 1.7122,0.1173 2.5694,0.1469 1.2717,0.0438 2.652,0.3267 3.8173,0.0734 0.5231,-0.1137 0.8784,-0.7434 1.248,-1.1746 0.3645,-0.4252 0.5427,-1.0714 0.9544,-1.3948 0.2735,-0.2149 0.736,-0.2476 1.1011,-0.2202 0.6137,0.046 1.2635,0.2059 1.8353,0.4404 0.3826,0.157 0.6341,0.6486 1.0277,0.7341 0.7321,0.1592 1.5665,-0.0147 2.3492,0 0.5142,0.0097 1.0679,-0.0878 1.5416,0.0735 0.6764,0.2302 1.2175,0.9391 1.9087,1.1011 0.8749,0.2051 1.9162,-0.2214 2.7896,0 0.8639,0.219 1.7111,0.7543 2.4225,1.3214 0.977,0.7788 1.8984,1.9396 2.7844,2.8401" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path9938_8" + class="fil1 str0" + d="M241.034 102.014c0.1168,-0.1087 0.2435,-0.1941 0.3863,-0.2417 0.7782,-0.2594 2.5237,0.2668 3.1226,-0.3195 1.6911,-1.6557 2.5005,-2.1937 3.5218,-3.3142 0.3824,-0.4195 -0.8755,-1.1321 -1.0382,-1.7649 -0.1488,-0.5784 -0.1361,-1.3376 0.1038,-1.8687 0.2446,-0.5417 1.0395,-0.8206 1.3496,-1.3496 0.2782,-0.4746 0.5842,-1.1664 0.4153,-1.6611 -0.3155,-0.9241 -1.2293,-1.7429 -1.8687,-2.5955 -0.3988,-0.5316 -1.219,-0.9281 -1.2458,-1.5572 -0.0479,-1.1222 -0.0193,-2.2109 0,-3.3222 0.0065,-0.3782 1.0647,0.0998 1.4534,-0.1038 0.3381,-0.1771 0.6599,-0.6369 0.7267,-1.0382 0.1754,-1.0521 -0.1832,-3.1862 0,-3.3222 1.8679,-1.3855 1.7967,-2.3399 2.9069,-3.0107 0.5509,-0.3328 1.4141,-0.1454 2.0764,0 0.7566,0.1661 1.4821,0.8621 2.1802,0.9343 0.3055,0.0316 0.567,-0.3999 0.8305,-0.6229 0.1864,-0.1577 0.3933,-0.3131 0.5191,-0.5191 0.2548,-0.4169 0.2612,-1.0747 0.6229,-1.3496 0.5034,-0.3826 1.5886,-0.1722 1.9726,-0.6229 0.4119,-0.4836 0.065,-1.5965 0.4153,-2.1802 0.2726,-0.4544 0.9232,-0.7633 1.4534,-0.9343 0.5425,-0.1751 1.2986,0.186 1.7649,-0.1039 0.8141,-0.506 1.2577,-1.7885 2.0764,-2.284 0.4964,-0.3004 1.3288,-0.3102 1.8687,-0.1038 0.6367,0.2435 1.1443,1.2467 1.6611,1.4535 0.1753,0.0701 0.3592,-0.3874 0.4153,-0.6229 0.1169,-0.4912 0.1038,-1.0399 0.1038,-1.5573 0,-0.2094 -0.1829,-0.4517 -0.1038,-0.6229 0.1286,-0.2787 0.4632,-0.7267 0.7267,-0.7267 0.3248,0 0.7426,0.8252 1.0382,0.7267 0.4311,-0.1437 0.7613,-0.969 1.142,-1.4535" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path9938_9" + class="fil1 str0" + d="M239.032 132.918c-0.3461,-0.4845 -0.9004,-0.9022 -1.0382,-1.4535 -0.2082,-0.833 -0.3307,-1.9794 0,-2.6992 0.2576,-0.5606 1.3579,-0.5958 1.7649,-1.142 0.9081,-1.2187 1.5219,-2.7464 2.1802,-4.1528 0.103,-0.2201 0.0403,0.028 0.1038,-0.1975 0.3035,-1.0779 -0.9854,-2.0215 -1.7589,-3.1206 -0.3217,-0.4572 0.2387,-2.9529 0.0978,-4.2606 -0.1014,-0.9417 -0.8992,-1.7655 -1.142,-2.6992 -0.2071,-0.7966 -0.0365,-1.6789 -0.2076,-2.4917 -0.3826,-1.8173 -1.1815,-3.6456 -1.4535,-5.3985 -0.0394,-0.2542 0.4432,-0.3801 0.5191,-0.6229 0.0972,-0.3109 -0.1493,-0.7956 0,-1.0382 0.1276,-0.2073 0.6437,-0.3862 0.8306,-0.3115 0.1592,0.0637 0.0642,0.7398 0.2076,0.7268 0.2372,-0.0216 0.64,-0.5362 0.9344,-0.8306 0.3502,-0.3502 0.6128,-0.8856 0.9633,-1.2117" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="wien" + class="fil1 str0" + d="M247.243 57.4849c0.4589,-0.0689 1.004,-0.0149 1.3758,-0.2117 0.2279,-0.1207 0.2074,-0.6411 0.4234,-0.7408 0.2426,-0.112 0.6854,-0.0411 0.9524,0.1058 0.4385,0.2412 0.8116,0.6787 1.1642,1.0583 0.106,0.1142 0.0904,0.4112 0.2116,0.4233 0.2316,0.0232 0.5709,-0.3347 0.8467,-0.3175 0.2886,0.0181 0.6713,0.1896 0.8466,0.4234 0.248,0.3306 0.2461,0.8623 0.4233,1.2699 0.1756,0.4038 0.5748,0.7626 0.635,1.1642 0.0456,0.304 -0.2685,0.6257 -0.3175,0.9524 -0.0568,0.3789 -0.0519,0.7831 0,1.1642 0.0539,0.395 0.1965,0.781 0.3175,1.1641 0.0907,0.2871 0.4286,0.672 0.3175,0.8466 -0.1358,0.2134 -0.6949,0.2962 -1.0583,0.3175 -0.836,0.0492 -1.7174,-0.1829 -2.5399,-0.1058 -0.3063,0.0287 -0.6035,0.2322 -0.8467,0.4233 -0.2506,0.197 -0.3705,0.6086 -0.6349,0.7408 -0.2295,0.1148 -0.5818,0.0736 -0.8467,0 -0.3701,-0.1028 -0.6957,-0.4909 -1.0583,-0.5291 -0.3077,-0.0324 -0.624,0.2796 -0.9525,0.3175 -0.5886,0.0679 -1.1999,0.0176 -1.7991,0 -0.6002,-0.0177 -1.2692,0.0849 -1.7991,-0.1059 -0.352,-0.1267 -0.686,-0.5074 -0.8466,-0.8466 -0.1569,-0.3311 -0.1261,-0.7804 -0.1059,-1.1641 0.0151,-0.2865 0.2727,-0.5873 0.2117,-0.8467 -0.0801,-0.3403 -0.5477,-0.6034 -0.635,-0.9524 -0.0891,-0.3565 -0.0058,-0.8069 0.1058,-1.1642 0.0648,-0.2071 0.2331,-0.5038 0.4234,-0.5291 0.3388,-0.0452 0.7834,0.3175 1.1641,0.3175 0.2543,0 0.5506,-0.1386 0.7408,-0.3175 0.4095,-0.3855 0.6718,-0.9486 1.0583,-1.3758 0.2838,-0.3137 0.6413,-0.5577 0.9525,-0.8467 0.1827,-0.1696 0.3175,-0.4233 0.5291,-0.5291 0.2117,-0.1058 0.4942,-0.0688 0.7408,-0.1058z" + nodetypes="cssssssssssssssssssssssssssssssssss" + style="fill:#66cc33" /> + <path + id="path11880_11" + class="fil1 str0" + d="M192 86.4416c-0.0527,-0.4566 -0.1525,-1.4125 -0.1058,-1.8642 0.0591,-0.5713 0.2296,-1.1475 0.4233,-1.6933 0.1944,-0.5478 0.5278,-1.0452 0.7408,-1.5874 0.1751,-0.4456 0.6257,-1.016 0.4233,-1.3758 -0.4325,-0.769 -1.4623,-1.5445 -2.3282,-2.0108 -0.5099,-0.2746 -1.2309,-0.0412 -1.7991,-0.2117 -0.4901,-0.147 -0.9678,-0.4299 -1.3758,-0.7408 -0.3328,-0.2535 -0.5241,-0.6836 -0.8467,-0.9524 -0.3124,-0.2604 -0.6849,-0.4813 -1.0583,-0.635 -0.2264,-0.0932 -0.5376,0.027 -0.7408,-0.1059 -0.7139,-0.4668 -1.3941,-1.0766 -2.0108,-1.6932 -0.4769,-0.4769 -1.3047,-1.0837 -1.2699,-1.5875 0.0358,-0.5192 0.9554,-1.0745 1.2629,-1.6456 0.1864,-0.3461 0.2824,-0.6916 0.2187,-1.106 -0.0774,-0.5028 -0.3686,-0.9756 -0.4233,-1.4816 -0.0864,-0.7993 -0.1493,-1.6522 0.1093,-2.3794 0.3058,-0.8602 0.8752,-1.7213 1.584,-2.1643 0.4201,-0.2626 1.155,-0.1577 1.6932,-0.007 0.3437,0.0962 0.7244,0.263 0.9525,0.5291 0.4068,0.4747 0.5287,1.2311 0.9525,1.6933 0.3523,0.3844 0.882,0.6887 1.3758,0.8467 0.3881,0.1242 0.8624,0.0998 1.2699,0 1.3211,-0.3235 2.7034,-0.688 3.9158,-1.27 0.5514,-0.2647 1.0134,-1.5041 1.5398,-1.8166 0.6024,-0.3577 0.9186,-0.2021 1.5734,-0.2488 0.333,-0.0238 1.6634,0.8732 1.9911,0.9118 0.272,0.032 0.0024,-0.6175 0.0267,-1.0282 0.0393,-0.6658 0.0883,-1.1709 0.0547,-1.9456 -0.0369,-0.848 -0.023,-1.9824 -0.157,-2.8132 -0.0424,-0.2628 -0.1649,-0.4264 -0.2082,-0.6862 -0.0625,-0.3752 -0.1479,-0.558 -0.164,-0.9455 -0.0191,-0.4592 0.0125,-0.9499 -0.1058,-1.3757 -0.0581,-0.2092 -0.354,-0.3213 -0.4234,-0.5292 -0.1423,-0.4271 0.031,-1.0585 -0.2116,-1.3758 -0.216,-0.2824 -0.6322,-0.3029 -0.9455,-0.5326 -0.2158,-0.1583 -0.5445,-0.367 -0.642,-0.6315 -0.1495,-0.4058 -0.2817,-0.841 -0.3175,-1.27 -0.0348,-0.4176 -0.1146,-0.9816 0.1059,-1.27 0.238,-0.3113 0.9948,-0.2539 1.2699,-0.5291 0.1482,-0.1482 0.1391,-0.5764 0,-0.7408 -0.2489,-0.2942 -0.7581,-0.4658 -1.1641,-0.635 -0.4407,-0.1836 -0.9207,-0.2716 -1.3758,-0.4233 -0.3916,-0.1305 -0.7833,-0.2647 -1.1641,-0.4233 -0.4659,-0.1941 -0.8924,-0.5222 -1.3758,-0.635 -0.5749,-0.1342 -1.2637,0.0726 -1.7991,-0.1059 -0.3113,-0.1037 -0.4939,-0.4938 -0.7408,-0.7408" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path11880_12" + class="fil1 str0" + d="M240.999 101.934c-0.3175,-0.8114 -0.5111,-1.7139 -0.9525,-2.4341 -0.2289,-0.3734 -0.6603,-0.7381 -1.0583,-0.8467 -0.3781,-0.1031 -0.8833,0.2762 -1.27,0.2117 -0.2483,-0.0414 -0.3967,-0.3967 -0.635,-0.5291 -0.3966,-0.2204 -0.8283,-0.4443 -1.2699,-0.5292 -0.4756,-0.0915 -0.9967,0.0606 -1.4817,0 -0.3616,-0.0452 -0.8478,-0.0575 -1.0583,-0.3175 -0.3892,-0.4809 -0.3515,-1.4241 -0.7408,-1.9049 -0.2104,-0.26 -0.7216,-0.1732 -1.0583,-0.3175 -0.4041,-0.1732 -0.9937,-0.2942 -1.1641,-0.635 -0.2176,-0.4352 0.1383,-1.1862 0,-1.6933 -0.0734,-0.2689 -0.3782,-0.5323 -0.635,-0.635 -0.2724,-0.1089 -0.6641,-0.0961 -0.9525,0 -0.3466,0.1156 -0.6147,0.4903 -0.9524,0.635 -0.1562,0.0669 -0.448,0.1263 -0.5292,0 -0.2363,-0.3676 -0.3067,-0.982 -0.4233,-1.4816 -0.1304,-0.5587 -0.0771,-1.2125 -0.3175,-1.6933 -0.1477,-0.2953 -0.537,-0.4728 -0.8466,-0.635 -0.4313,-0.2259 -0.9212,-0.3432 -1.3758,-0.5291 -0.3215,-0.1315 -0.6611,-0.2393 -0.9525,-0.4234 -0.3789,-0.2392 -0.6452,-0.7666 -1.0583,-0.8466 -0.6805,-0.1317 -1.5284,0.3074 -2.2224,0.2117 -0.329,-0.0454 -0.5578,-0.4328 -0.8467,-0.635 -0.4166,-0.2917 -0.8156,-0.6279 -1.27,-0.8467 -0.4981,-0.2398 -1.1259,-0.2351 -1.5874,-0.5291 -0.7291,-0.4644 -0.9525,-1.3758 -1.0583,-1.7991 -0.1058,-0.4233 -0.5512,-0.5789 -1.27,-0.635 -0.5247,-0.0409 -1.0841,-0.0247 -1.5874,0.1058 -0.4492,0.1165 -0.8203,0.5351 -1.27,0.635 -0.5028,0.1117 -1.1126,-0.1445 -1.5874,0 -0.3366,0.1024 -0.6398,0.4373 -0.8467,0.7408 -0.3222,0.4726 -0.3505,1.2158 -0.7408,1.5875 -0.3505,0.3338 -0.9884,0.351 -1.4816,0.5291 -0.7767,0.2805 -1.5285,0.7194 -2.3283,0.8467 -0.7524,0.1197 -1.5526,-0.1059 -2.3283,-0.1059 -0.4943,0 -1.1104,-0.1362 -1.4816,0.1059 -0.4402,0.287 -0.548,1.0996 -0.9525,1.4816 -0.2305,0.2177 -0.6518,0.365 -0.9524,0.3175 -0.3696,-0.0584 -0.7114,-0.4142 -1.0583,-0.635 -0.4291,-0.2731 -0.8036,-0.6801 -1.27,-0.8466 -0.5214,-0.1863 -1.1273,-0.1935 -1.6933,-0.2117 -0.5276,-0.017 -1.0868,0.1773 -1.5874,0.1058 -0.2402,-0.0343 -0.5351,-0.2109 -0.635,-0.4233 -0.1823,-0.3873 -0.1585,-0.4268 -0.2117,-0.8874" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path13825_13" + class="fil1 str0" + d="M153.268 101.57c0.5952,0.303 0.9776,0.3149 1.6479,0.3794 0.5593,0.0537 1.1721,0.0838 1.7024,-0.0753 0.4155,-0.1247 0.8206,-0.4071 1.135,-0.7094 0.3004,-0.2888 0.6029,-0.6738 0.7093,-1.064 0.1064,-0.3901 0.0551,-0.8793 -0.0709,-1.2768 -0.1814,-0.572 -0.5273,-1.1132 -0.8512,-1.6315 -0.2672,-0.4275 -0.7512,-0.7539 -0.9222,-1.2059 -0.16,-0.4229 -0.0709,-0.9457 -0.0709,-1.4187 0,-0.6146 -0.083,-1.2672 0.0709,-1.8443 0.1299,-0.4869 0.3805,-1.0717 0.7803,-1.3478 0.5932,-0.4096 1.5033,-0.392 2.199,-0.7093 0.652,-0.2974 1.2039,-0.8681 1.8443,-1.135 0.2108,-0.0878 0.4957,-0.0164 0.7093,0.071 0.3066,0.1254 0.5409,0.4481 0.8512,0.5675 0.3044,0.117 0.6677,0.0695 0.9931,0.1418 0.313,0.0696 0.6411,0.1376 0.9222,0.2838 0.31,0.1612 0.532,0.532 0.8512,0.6384 0.3192,0.1064 0.7147,0.0403 1.064,0 0.2655,-0.0307 0.5648,-0.2949 0.7803,-0.2128 0.281,0.107 0.4714,0.5216 0.7094,0.7803 0.3058,0.3324 0.7518,0.6037 0.9221,0.993 0.1607,0.3674 0.0272,0.8536 0.0709,1.2769 0.0272,0.2624 0,0.7093 0.1419,0.7802 0.1419,0.071 0.4962,-0.2024 0.7094,-0.3546 0.2834,-0.2025 0.4725,-0.5775 0.7802,-0.7094 0.3544,-0.1518 0.8317,-0.0132 1.2059,-0.1418 0.3824,-0.1315 0.7059,-0.4318 1.064,-0.6385 0.2566,-0.148 0.5272,-0.4708 0.7803,-0.4256 0.409,0.0731 0.8057,0.5176 1.2059,0.7803 0.3564,0.2339 0.6733,0.5591 1.064,0.7094 0.5314,0.2043 1.1297,0.288 1.7025,0.3546 0.4439,0.0517 0.9037,0.048 1.3477,0 0.4309,-0.0465 0.9539,-0.027 1.2769,-0.2837 0.5991,-0.4763 0.9125,-1.4256 1.4896,-1.9152 0.2032,-0.1724 0.5669,-0.06 0.8512,-0.071 0.3305,-0.0127 0.8277,0.1764 0.9931,0 0.1893,-0.2019 -0.1481,-0.8968 0.0709,-1.1349 0.3248,-0.3531 1.0365,-0.4356 1.5606,-0.6384 0.9419,-0.3646 1.9516,-0.6007 2.8374,-1.0641 0.6511,-0.3405 1.2006,-0.8761 1.7733,-1.3477 0.6332,-0.5214 1.2296,-1.0877 1.8443,-1.6315" + nodetypes="csssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + <path + id="path14796" + class="fil1 str0" + d="M153.235 101.569c-0.1332,0.4218 -0.3201,0.8339 -0.3996,1.2654 -0.0759,0.412 -0.106,0.8473 -0.0666,1.2653 0.0716,0.7586 0.191,1.5297 0.3996,2.2643 0.302,1.0635 0.7181,2.1031 1.1322,3.1301 0.1408,0.3494 0.3071,0.7016 0.5328,0.999 0.2627,0.3464 0.6394,0.6056 0.9323,0.9324 0.2843,0.317 0.4655,0.7765 0.7992,0.9989 0.2657,0.1772 0.7259,0.2778 0.999,0.1998 0.1931,-0.0552 0.2875,-0.3892 0.3995,-0.5994 0.0656,-0.1228 0.0276,-0.3855 0.1332,-0.3996 0.2273,-0.0303 0.5752,0.1851 0.8658,0.2664 0.2643,0.074 0.6007,0.2881 0.7992,0.1998 0.2011,-0.0893 0.2627,-0.4904 0.3996,-0.7325 0.1517,-0.2685 0.26,-0.742 0.4661,-0.7992 0.1935,-0.0538 0.5931,0.229 0.7326,0.4662 0.3045,0.5176 0.3159,1.2435 0.5994,1.7981 0.2271,0.4444 0.7628,0.7507 0.9324,1.1988 0.1412,0.3733 -0.2087,0.9343 0,1.2653 0.4351,0.6902 1.2785,1.209 1.9313,1.7981 0.2573,0.2323 0.5479,0.4287 0.7992,0.666 0.1483,0.1401 0.3388,0.284 0.3995,0.4662 0.0725,0.2174 0.1039,0.5343 0,0.7326 -0.1403,0.2679 -0.4694,0.4686 -0.7325,0.6659 -0.3585,0.2689 -0.7842,0.4542 -1.1322,0.7326 -0.207,0.1656 -0.5041,0.3561 -0.5328,0.5994 -0.0601,0.5115 0.3144,1.1252 0.2664,1.6649 -0.0408,0.4592 -0.2964,0.921 -0.5328,1.332 -0.2742,0.477 -0.7763,0.8398 -0.9989,1.3319 -0.1992,0.4402 -0.0206,1.0554 -0.2664,1.4652 -0.4201,0.7002 -1.1544,1.2431 -1.7315,1.8647" + nodetypes="cssssssssssssssssssssssssssssss" /> + </g> + <style> + * { -webkit-transition:1s ease all; transition:.8s ease all; } + </style> + <g + id="Landesgrenze"> + <metadata + id="CorelCorpID_2Corel-Layer" /> + <path + id="path3129_14" + class="fil1 str0" + d="M28.6055 128.891c-0.3739,-0.255 -1.6467,-0.1373 -2.1412,-0.3021 -0.4945,-0.1649 -0.9558,-0.5548 -1.3394,-0.9209 -0.2303,-0.2198 -0.4546,-0.5378 -0.5022,-0.8371 -0.0501,-0.3146 0.119,-0.6749 0.2092,-1.0045 0.1888,-0.6889 0.515,-1.3736 0.6279,-2.0509 0.0266,-0.1598 -0.0899,-0.3676 -0.2093,-0.4605 -0.1318,-0.1025 -0.3598,-0.121 -0.5441,-0.1255 -0.3878,-0.0095 -0.8498,0.2392 -1.172,0.0837 -0.487,-0.2351 -0.7536,-1.019 -1.2557,-1.2557 -0.4746,-0.2237 -1.1486,0.039 -1.6742,-0.1256 -0.8557,-0.2679 -1.6267,-0.8519 -2.4695,-1.1719 -0.2594,-0.0985 -0.5572,-0.0728 -0.8371,-0.0837 -0.4317,-0.017 -0.8852,0.0557 -1.2975,0 -0.1039,-0.0141 -0.2691,-0.1166 -0.2511,-0.2093 0.0657,-0.3398 0.3944,-0.7078 0.5022,-1.0883 0.1294,-0.4566 0.1813,-0.9463 0.2093,-1.4231 0.0278,-0.4719 0.0677,-0.9765 -0.0419,-1.423 -0.0787,-0.3209 -0.316,-0.6103 -0.5232,-0.879 -0.309,-0.401 -0.8512,-0.6861 -1.0254,-1.1301 -0.1816,-0.4629 0.1063,-1.1071 -0.0419,-1.5905 -0.1169,-0.3816 -0.6663,-0.6344 -0.7534,-1.0046 -0.0803,-0.3413 0.3502,-0.8118 0.2512,-1.1301 -0.0964,-0.3096 -0.7128,-0.4502 -0.8372,-0.7534 -0.0988,-0.2409 0.0248,-0.6258 0.1675,-0.879 0.2898,-0.5141 0.7552,-0.9472 1.1301,-1.4231 0.3506,-0.445 0.803,-0.8449 1.0464,-1.3393 0.1892,-0.3845 -0.0047,-1.0417 0.2511,-1.2976 0.2464,-0.2464 0.8661,-0.0615 1.2557,-0.2092 0.4196,-0.1592 0.9142,-0.3873 1.1719,-0.7116 0.1748,-0.2198 0.166,-0.6243 0.1256,-0.9208 -0.0433,-0.3174 -0.2852,-0.6036 -0.3767,-0.9208 -0.1178,-0.4083 -0.0638,-0.8966 -0.2511,-1.2557 -0.1475,-0.2827 -0.4767,-0.4832 -0.7534,-0.6697 -0.3651,-0.246 -0.8674,-0.3402 -1.172,-0.6278 -0.1977,-0.1867 -0.4005,-0.5626 -0.3348,-0.7953 0.0878,-0.3114 0.4842,-0.6274 0.7952,-0.8371 0.289,-0.1949 0.6567,-0.3361 1.0045,-0.3767 0.4893,-0.0571 1.0116,0.1123 1.5069,0.0837 0.2302,-0.0133 0.4556,-0.1175 0.6696,-0.2093 0.2743,-0.1175 0.6008,-0.2068 0.7953,-0.4185 0.2798,-0.3046 0.4163,-0.7547 0.6278,-1.1301 0.221,-0.392 0.3797,-0.8366 0.6697,-1.172 0.3759,-0.4347 0.8757,-0.7761 1.328,-1.1383 0.0424,-0.0339 0.1148,-0.0775 0.1561,-0.05 0.1637,0.1088 0.3714,0.2704 0.4589,0.4589 0.1335,0.2875 0.1622,0.6425 0.204,0.9688 0.0431,0.3366 -0.1317,0.7992 0.051,1.0199 0.2253,0.2722 0.7679,0.3797 1.1728,0.4589 0.377,0.0738 0.7823,-0.0142 1.1728,0 0.5444,0.0198 1.1376,-0.0714 1.6317,0.102 0.4748,0.1666 0.9234,0.5468 1.2748,0.9178 0.2605,0.2749 0.4003,0.6684 0.561,1.0199 0.1112,0.2434 0.063,0.6582 0.2549,0.7649 0.267,0.1483 0.8208,-0.1305 1.1218,0 0.2089,0.0905 0.2561,0.4531 0.408,0.6628 0.2051,0.2833 0.42,0.565 0.6629,0.8159 0.267,0.276 0.7005,0.4507 0.8668,0.7649 0.1396,0.2637 0.107,0.6611 0.051,0.9688 -0.046,0.2532 -0.2711,0.4642 -0.3569,0.7139 -0.1012,0.2942 -0.1973,0.6085 -0.204,0.9179 -0.0103,0.4725 -0.0101,1.0765 0.153,1.4277 0.0579,0.1248 0.3399,0 0.5099,0 0.4929,0 1.0156,0.1179 1.4788,0 0.4716,-0.12 0.874,-0.7058 1.3257,-0.7138 0.5002,-0.009 1.3642,0.3134 1.5298,0.6628 0.1404,0.2965 -0.4432,0.8363 -0.6119,1.2748 -0.1713,0.4454 -0.2686,0.9189 -0.4079,1.3768 -0.0986,0.324 -0.1063,0.7212 -0.306,0.9689 -0.2252,0.2792 -0.7891,0.3242 -0.9688,0.6119 -0.1602,0.2563 -0.2796,0.9188 -0.051,1.0198 0.5023,0.222 1.5479,0.1546 2.2436,-0.051 0.8,-0.2364 1.5573,-0.7634 2.2436,-1.2748 1.0475,-0.7804 2.0851,-1.6511 2.9576,-2.6006 0.2833,-0.3083 0.2357,-0.869 0.5099,-1.1728 0.3547,-0.3931 0.9882,-0.5365 1.3768,-0.9178 0.5293,-0.5195 1.0668,-1.1262 1.3767,-1.7847 0.234,-0.4973 0.245,-1.1227 0.255,-1.6828 0.007,-0.3917 -0.0454,-0.8223 -0.204,-1.1728 -0.1644,-0.3634 -0.5982,-0.6077 -0.7648,-0.9688 -0.1393,-0.3018 -0.153,-0.6786 -0.153,-1.0199 0,-0.5255 0.206,-1.0718 0.153,-1.5807 -0.032,-0.307 -0.4261,-0.5946 -0.408,-0.8669 0.0159,-0.2376 0.2722,-0.6003 0.5099,-0.6629 0.4082,-0.1074 1.1606,-0.0855 1.4278,0.153 0.2087,0.1864 -0.0934,0.7762 0,1.1218 0.0766,0.2833 0.2547,0.6434 0.5099,0.7649 0.4586,0.2184 1.1122,0.3069 1.6318,0.255 0.3303,-0.0331 0.613,-0.338 0.9178,-0.5099 0.3581,-0.202 0.6831,-0.5241 1.0708,-0.6119 0.5131,-0.1162 1.0898,-0.0296 1.6318,0 0.3928,0.0214 0.8309,-0.0055 1.1728,0.1529 0.355,0.1645 0.5837,0.5867 0.9178,0.8159 0.2608,0.1788 0.602,0.2336 0.8669,0.4079 0.381,0.2507 0.6584,0.7346 1.0708,0.8669 0.4885,0.1567 1.0981,0.0793 1.6318,0 0.7241,-0.1076 1.5231,-0.6396 2.1416,-0.5609 0.3163,0.0402 0.6265,0.5991 0.6629,0.9178 0.0316,0.2762 -0.3017,0.5803 -0.4589,0.8669 -0.1318,0.2403 -0.5212,0.614 -0.4079,0.7139 0.1757,0.155 0.9529,-0.1804 1.2747,0.051 0.766,0.5505 1.3511,1.5108 1.9887,2.2946 0.1782,0.2191 0.4409,0.4707 0.459,0.7139 0.0159,0.2157 -0.2515,0.4356 -0.357,0.6629 -0.1154,0.2486 -0.2945,0.5242 -0.3059,0.7649 -0.0056,0.1163 0.1258,0.297 0.2549,0.3059 1.5876,0.11 3.3757,0.4025 4.8952,0.051 0.9791,-0.2264 1.6916,-1.3562 2.6006,-1.7847 0.2808,-0.1324 0.747,-0.0524 0.9689,0.102 0.169,0.1176 0.1888,0.4714 0.2039,0.7139 0.0189,0.3015 -0.2952,0.8041 -0.102,0.9178 0.3847,0.2263 1.3704,0.3959 1.8357,0.102 0.8265,-0.522 1.2723,-1.8342 2.0397,-2.5496 0.2355,-0.2195 0.6419,-0.1896 0.9689,-0.255 0.3529,-0.0706 0.8046,0.0068 1.0708,-0.1529 0.1587,-0.0953 0.2126,-0.412 0.2039,-0.6119 -0.0083,-0.191 -0.3414,-0.3992 -0.2549,-0.5609 0.3044,-0.5692 0.7803,-1.4557 1.4278,-1.6318 1.4772,-0.4018 3.8163,0.4514 4.9462,-0.102 0.5358,-0.2624 -0.3056,-1.7514 0.051,-2.3456 0.4083,-0.6806 1.4798,-1.252 2.2436,-1.4787 0.3241,-0.0963 0.6481,0.4709 1.0198,0.5099 1.413,0.148 2.8897,0.0261 4.3343,0.051 0.5271,0.009 1.1619,0.2246 1.5808,0.051 0.278,-0.1153 0.1914,-0.8321 0.5099,-0.9179 1.6362,-0.4411 3.5628,-0.6003 5.3541,-0.6629 2.1011,-0.0734 4.9123,0.8168 6.323,0.255 0.595,-0.237 -0.2203,-1.7662 -0.306,-2.6516 -0.0672,-0.6954 -0.4699,-1.5926 -0.1529,-2.0907 0.3969,-0.6237 1.8549,-1.4338 2.2946,-1.2748 0.3592,0.1299 -0.1105,1.5917 0.102,2.1417 0.0765,0.1979 0.522,0.1614 0.7649,0.102 0.59,-0.1445 1.1542,-0.6359 1.7337,-0.7139 0.3044,-0.041 0.6037,0.266 0.9178,0.3569 0.3318,0.0961 0.6864,0.229 1.0199,0.204 0.3464,-0.026 0.6698,-0.2972 1.0198,-0.3569 0.3469,-0.0593 0.8251,-0.1513 1.0708,0 0.1962,0.1207 0.2072,0.5372 0.255,0.8158 0.0542,0.3163 -0.1095,0.7133 0.051,0.9689 0.2984,0.4753 0.8544,0.8585 1.3258,1.2238 0.2085,0.1616 0.4776,0.3651 0.7139,0.3569 0.2566,-0.0088 0.4957,-0.3124 0.7648,-0.4079 0.2578,-0.0915 0.5842,-0.0227 0.8159,-0.153 0.3122,-0.1756 0.5524,-0.5014 0.8159,-0.7649 0.3144,-0.3144 0.5113,-0.8894 0.9178,-0.9688 1.0722,-0.2095 2.3489,0.0296 3.5185,0.102 0.4792,0.0296 1.0391,0.0044 1.4277,0.2039 0.2403,0.1234 0.2697,0.5392 0.4589,0.7649 0.2527,0.3012 0.6263,0.5065 0.8669,0.8159 0.2353,0.3025 0.4735,0.6604 0.5609,1.0198 0.0656,0.2695 -0.0189,0.5926 -0.102,0.8669 -0.0868,0.2866 -0.369,0.5281 -0.4079,0.8158 -0.0461,0.3412 0.0166,0.7526 0.153,1.0709 0.1185,0.2766 0.3598,0.5645 0.6119,0.7139 0.2068,0.1225 0.5692,-0.0546 0.7649,0.1019 1.0791,0.8633 2.0309,1.9811 3.0595,2.9576 0.3142,0.2983 0.604,0.7516 0.9688,0.8668 0.2811,0.0888 0.6458,-0.2626 0.9688,-0.2549 0.3909,0.0093 0.8187,0.3633 1.1729,0.3059 0.2747,-0.0445 0.4979,-0.387 0.7138,-0.6119 0.1921,-0.2 0.4757,-0.4231 0.51,-0.6629 0.0337,-0.2361 -0.204,-0.5099 -0.306,-0.7649 -0.102,-0.2549 -0.278,-0.5042 -0.3059,-0.7648 -0.0231,-0.2153 0.0795,-0.4492 0.1529,-0.6629 0.1135,-0.3302 0.3476,-0.6326 0.408,-0.9689 0.0586,-0.3266 -0.1522,-0.7364 -0.051,-1.0198 0.0687,-0.1925 0.4673,-0.2207 0.5609,-0.4079 0.1103,-0.2207 0.0162,-0.5463 0.051,-0.8159 0.0332,-0.2573 0.0377,-0.5426 0.153,-0.7649 0.1226,-0.2366 0.4343,-0.3768 0.5609,-0.6119 0.1113,-0.2068 0.1529,-0.475 0.1529,-0.7139 0,-0.288 -0.0656,-0.589 -0.1529,-0.8668 -0.0997,-0.3171 -0.2336,-0.6355 -0.408,-0.9179 -0.1825,-0.2955 -0.4098,-0.5756 -0.6629,-0.8159 -0.5033,-0.4778 -1.2748,-0.9688 -1.4787,-0.9688 -0.204,0 -0.1589,0.442 -0.7139,0.5099 -0.4861,0.0595 -0.9895,0.0392 -1.4788,0 -0.3606,-0.0288 -0.8481,0.0009 -1.0708,-0.2039 -0.2023,-0.1861 -0.2369,-0.6556 -0.204,-0.9689 0.035,-0.3326 0.2516,-0.6561 0.408,-0.9688 0.1496,-0.2992 0.3822,-0.5603 0.5099,-0.8669 0.1272,-0.3053 0.1027,-0.6776 0.2549,-0.9688 0.2387,-0.4567 0.6297,-0.8382 0.9179,-1.2748 0.2727,-0.4133 0.5821,-0.8227 0.7649,-1.2748 0.1402,-0.3468 0.2141,-0.7543 0.2039,-1.1218 -0.0067,-0.2444 -0.1288,-0.4977 -0.2549,-0.7139 -0.2308,-0.3957 -0.5508,-0.7431 -0.8159,-1.1218 -0.2108,-0.3012 -0.4429,-0.5928 -0.6119,-0.9179 -0.2729,-0.5248 -0.418,-1.1246 -0.7139,-1.6317 -0.1801,-0.3087 -0.4368,-0.6028 -0.7139,-0.8159 -0.1648,-0.1268 -0.4615,-0.0667 -0.6119,-0.204 -0.2406,-0.2197 -0.4044,-0.5621 -0.5609,-0.8668 -0.1664,-0.3242 -0.2693,-0.681 -0.4079,-1.0199 -0.1673,-0.409 -0.2593,-0.8687 -0.5099,-1.2238 -0.3613,-0.5118 -0.8924,-0.9099 -1.3258,-1.3767 -0.4504,-0.4851 -0.9982,-0.9259 -1.3258,-1.4788 -0.2163,-0.365 -0.1798,-0.8574 -0.3059,-1.2748 -0.0948,-0.3135 -0.4078,-0.6842 -0.357,-0.9179 0.0342,-0.1572 0.4036,-0.1817 0.6119,-0.2549 0.4206,-0.1478 0.9139,-0.1729 1.2748,-0.4079 0.37,-0.241 0.6156,-0.6767 0.9179,-1.0199 0.3266,-0.3707 0.69,-0.7192 0.9688,-1.1218 0.1802,-0.2602 0.2534,-0.5887 0.4079,-0.8669 0.1004,-0.1807 0.2012,-0.3908 0.357,-0.5099 0.1332,-0.1018 0.3356,-0.1312 0.5099,-0.153 0.2337,-0.0292 0.6004,0.1459 0.8367,0.1229 0.4606,-0.045 0.8325,-0.1615 1.254,-0.3268 0.4454,-0.1747 0.9105,-0.4603 1.2238,-0.8159 0.3156,-0.3583 0.338,-0.9916 0.6629,-1.3258 0.27,-0.2777 0.7301,-0.3919 1.1218,-0.5099 0.8491,-0.2559 1.81,-0.2571 2.6006,-0.6119 0.5352,-0.2401 0.8475,-0.9646 1.3767,-1.1728 0.5076,-0.1997 1.1571,-0.0136 1.7338,-0.051 0.7321,-0.0475 1.5123,0.0137 2.1926,-0.204 0.5945,-0.1902 1.1457,-0.608 1.6317,-1.0198 0.7378,-0.625 1.3861,-1.3706 2.0397,-2.0907 0.3493,-0.3847 0.7376,-0.7702 0.9689,-1.2238 0.2106,-0.4133 0.2362,-0.9183 0.3569,-1.3767 0.1343,-0.5104 0.3349,-1.0107 0.4079,-1.5298 0.08,-0.5687 -0.0193,-1.1625 0.051,-1.7337 0.0657,-0.5337 0.3095,-1.0487 0.357,-1.5808 0.0374,-0.4198 -0.0367,-0.855 -0.102,-1.2748 -0.0537,-0.345 -0.3384,-0.7418 -0.255,-1.0198 0.0696,-0.232 0.4594,-0.3685 0.7139,-0.5099 0.3574,-0.1986 0.7328,-0.3889 1.1218,-0.5099 0.3759,-0.1169 0.816,-0.2715 1.1728,-0.204 0.2721,0.0515 0.4509,0.4182 0.7139,0.5609 0.3319,0.1802 0.7027,0.3251 1.0708,0.408 0.3118,0.0701 0.654,-0.0063 0.9689,0.0509 0.246,0.0448 0.5015,0.1249 0.7139,0.255 0.3145,0.1928 0.5932,0.4598 0.8668,0.7139 0.2023,0.1878 0.3462,0.4416 0.5609,0.6119 0.2783,0.2206 0.5913,0.4588 0.9179,0.5609 0.2173,0.0679 0.5625,0.0625 0.7139,-0.051 0.1206,-0.0904 0.0723,-0.3732 0.102,-0.5609 0.0723,-0.4582 0.0499,-0.9586 0.2039,-1.3768 0.0839,-0.2277 0.2947,-0.4763 0.5099,-0.5609 0.2607,-0.1024 0.6246,0.0604 0.9179,0 0.2846,-0.0586 0.6891,-0.143 0.8159,-0.3569 0.1451,-0.245 -0.055,-0.6899 0,-1.0199 0.047,-0.2819 0.1866,-0.5517 0.3059,-0.8158 0.1187,-0.2628 0.3379,-0.4935 0.408,-0.7649 0.0659,-0.2555 0.041,-0.5492 0,-0.8159 -0.061,-0.3962 -0.3134,-0.7804 -0.306,-1.1728 0.0096,-0.5085 0.334,-1.0253 0.3569,-1.5297 0.0111,-0.2435 -0.1317,-0.4965 -0.2549,-0.7139 -0.1658,-0.2925 -0.5806,-0.5183 -0.6119,-0.8159 -0.0367,-0.3483 0.1973,-0.7971 0.4079,-1.1218 0.1973,-0.3042 0.4934,-0.6376 0.8159,-0.7649 0.3234,-0.1277 0.76,-0.0693 1.1218,0 0.437,0.0837 0.9137,0.2037 1.2748,0.4589 0.6247,0.4417 1.0529,1.2119 1.6827,1.6318 0.339,0.226 0.8457,0.1424 1.2238,0.3059 0.2508,0.1084 0.5048,0.2935 0.6629,0.5099 0.1648,0.2255 0.1819,0.554 0.306,0.8159 0.1819,0.384 0.6425,0.754 0.6119,1.1218 -0.0374,0.4481 -0.7656,0.8835 -0.8159,1.3258 -0.0347,0.3056 0.327,0.6505 0.5609,0.9179 0.361,0.4125 0.7466,0.9097 1.2238,1.1218 0.4407,0.1958 1.021,0.0551 1.5298,0.102 0.783,0.0721 1.5619,0.2034 2.3456,0.2549 0.5081,0.0335 1.0469,-0.1311 1.5297,0 0.894,0.2428 1.7197,0.7873 2.6006,1.1218 0.4619,0.1754 0.9792,0.447 1.4278,0.408 0.3333,-0.029 0.6317,-0.383 0.9178,-0.6119 0.3088,-0.247 0.5397,-0.6305 0.8669,-0.8159 0.1827,-0.1035 0.4869,0.0546 0.6629,-0.051 0.2489,-0.1493 0.4751,-0.4403 0.6119,-0.7139 0.1692,-0.3383 0.1755,-0.7583 0.306,-1.1218 0.1074,-0.2994 0.2053,-0.645 0.4079,-0.8668 0.1544,-0.1691 0.4694,-0.3581 0.6629,-0.306 0.2484,0.0669 0.414,0.478 0.6629,0.6629 0.346,0.257 0.7227,0.5067 1.1218,0.6629 0.3828,0.1498 0.8218,0.2728 1.2238,0.2549 0.3629,-0.0161 0.7095,-0.2821 1.0708,-0.3569 0.1316,-0.0272 0.3038,-0.0242 0.408,0.051 0.2018,0.1457 0.3004,0.4922 0.5099,0.6119 0.1475,0.0843 0.3774,-0.0216 0.5609,0 0.1055,0.0124 0.2282,0.0313 0.3059,0.102 0.2962,0.2692 0.4886,0.706 0.8159,0.9178 0.2506,0.1622 0.7225,0.2863 0.9179,0.204 0.1275,-0.0537 0.0434,-0.4075 0.0509,-0.6119 0.0095,-0.2546 -0.0185,-0.511 0,-0.7649 0.0325,-0.443 0.1363,-0.8825 0.153,-1.3258 0.0173,-0.4576 -0.0883,-0.9216 -0.051,-1.3767 0.0477,-0.5817 0.1151,-1.1929 0.306,-1.7338 0.115,-0.3259 0.3613,-0.6234 0.6119,-0.8668 0.3443,-0.3345 0.7792,-0.5816 1.1728,-0.8669 0.2863,-0.2076 0.6844,-0.3342 0.8668,-0.6119 0.2085,-0.3172 0.2036,-0.782 0.306,-1.1728 0.0846,-0.323 0.0727,-0.7461 0.255,-0.9688 0.1237,-0.1513 0.4384,-0.1699 0.6629,-0.153 1.3563,0.1021 3.0511,0.7155 4.0793,0.5099 0.3316,-0.0663 -0.0076,-0.884 0,-1.3258 0.0094,-0.544 0.0421,-1.0877 0.051,-1.6317 0.0081,-0.4928 -0.0617,-0.9959 0,-1.4788 0.0403,-0.3159 0.2264,-0.6058 0.3059,-0.9178 0.1415,-0.5548 0.3211,-1.1173 0.357,-1.6828 0.0321,-0.5053 -0.0931,-1.0209 -0.153,-1.5297 -0.0421,-0.358 -0.1374,-0.7121 -0.153,-1.0708 -0.0184,-0.4232 -0.0329,-0.8648 0.051,-1.2748 0.0691,-0.3379 0.195,-0.7115 0.408,-0.9689 0.1949,-0.2355 0.5109,-0.4789 0.8158,-0.5099 0.6979,-0.071 1.4609,0.1494 2.1927,0.204 0.407,0.0303 0.8368,-0.0434 1.2238,0.051 0.3099,0.0755 0.6634,0.2254 0.8668,0.4589 0.2556,0.2934 0.4148,0.7317 0.5099,1.1218 0.0749,0.3068 -0.1101,0.6892 0,0.9689 0.1108,0.2812 0.4076,0.6382 0.6629,0.7138 0.2036,0.0604 0.4673,-0.2312 0.7139,-0.3059 0.3144,-0.0953 0.6421,-0.1817 0.9689,-0.204 0.4211,-0.0287 1.0172,0.235 1.2748,0.051 0.2183,-0.156 0.0338,-0.7373 0.1529,-1.0708 0.1359,-0.3803 0.3328,-0.9718 0.6119,-1.0708 0.2478,-0.088 0.6307,0.4665 0.9689,0.5099 0.3247,0.0416 0.7027,-0.3119 1.0198,-0.255 0.3457,0.0621 0.6383,0.4209 0.9689,0.6119 0.4343,0.251 0.8719,0.5028 1.3257,0.7139 0.2771,0.1289 0.569,0.2754 0.8669,0.306 0.365,0.0374 0.8203,-0.2126 1.1218,-0.102 0.2084,0.0764 0.2341,0.4732 0.408,0.6629 0.387,0.4222 0.811,0.8363 1.2748,1.1728 0.4031,0.2924 0.8623,0.5364 1.3257,0.7139 0.3355,0.1284 0.7112,0.165 1.0709,0.2039 0.2692,0.0291 0.5789,-0.0947 0.8158,0 0.2731,0.1092 0.4831,0.4003 0.7139,0.6119 0.1771,0.1623 0.344,0.3361 0.5099,0.5099 0.191,0.2001 0.3037,0.5642 0.561,0.6119 0.9325,0.1732 2.0149,0.0811 3.0085,0.051 0.1282,-0.0038 0.2751,-0.0602 0.3569,-0.1529 0.1732,-0.1963 0.1927,-0.5889 0.4079,-0.7139 0.3117,-0.181 0.7841,-0.1781 1.1729,-0.204 0.1212,-0.0081 0.2563,0.0304 0.3569,0.102 2.7889,1.9851 5.5056,4.1229 8.3116,6.068 0.1855,0.1286 0.4366,0.148 0.6629,0.153 2.8842,0.063 5.7794,0.0213 8.6686,0.051 0.4253,0.0043 0.8633,0.1098 1.2748,0.051 0.3024,-0.0432 0.6354,-0.1668 0.8669,-0.357 0.2445,-0.2008 0.4382,-0.5179 0.5609,-0.8158 0.1153,-0.28 0.1266,-0.6099 0.153,-0.9179 0.0246,-0.2869 -0.0717,-0.5982 0,-0.8668 0.0643,-0.2413 0.2107,-0.5515 0.4079,-0.6629 0.1938,-0.1096 0.5101,-0.0075 0.7649,0 0.3231,0.0095 0.6497,0.0813 0.9688,0.0509 0.3948,-0.0375 0.7912,-0.2815 1.1728,-0.2549 0.3493,0.0244 0.6934,0.2447 1.0199,0.4079 0.3534,0.1768 0.6541,0.4813 1.0198,0.6119 0.3482,0.1244 0.7465,0.1234 1.1218,0.153 0.2705,0.0214 0.5813,-0.0902 0.8159,0 0.2074,0.0797 0.3821,0.311 0.5099,0.5099 0.1781,0.277 0.3145,0.6001 0.408,0.9179 0.0765,0.2601 -0.0463,0.7024 0.1019,0.8158 0.1407,0.1076 0.5078,-0.1233 0.7649,-0.1529 0.1849,-0.0214 0.374,0 0.5609,0 0.238,0 0.4921,-0.0598 0.7139,0 0.2201,0.0592 0.4363,0.2042 0.6119,0.3569 0.2153,0.1872 0.3245,0.5403 0.5609,0.6629 0.2226,0.1154 0.5436,0.0432 0.8159,0.051 0.3227,0.0092 0.6537,0.0525 0.9688,0 0.3988,-0.0665 0.7776,-0.2556 1.1728,-0.357 0.2677,-0.0686 0.5659,-0.2047 0.8159,-0.1529 0.2429,0.0502 0.4998,0.2569 0.6629,0.4589 0.1938,0.24 0.3051,0.5663 0.4079,0.8669 0.1182,0.3453 0.1745,0.7128 0.255,1.0708 0.0724,0.3219 0.1522,0.6432 0.204,0.9688 0.0671,0.4223 0.0791,0.8538 0.1529,1.2748 0.0961,0.5478 0.246,1.0862 0.357,1.6318 0.093,0.4573 0.175,0.917 0.2549,1.3767 0.0561,0.3221 0.153,0.6477 0.153,0.9689 0,0.2227 -0.0694,0.454 -0.153,0.6629 -0.1204,0.3011 -0.2553,0.6153 -0.4589,0.8668 -0.3743,0.4624 -0.912,0.8043 -1.2748,1.2748 -0.2661,0.3453 -0.4563,0.7645 -0.6119,1.1728 -0.1164,0.3056 -0.1813,0.6412 -0.2039,0.9689 -0.0454,0.6582 0.0112,1.3261 0,1.9887 -0.0058,0.3402 0.0439,0.7064 -0.051,1.0198 -0.075,0.2475 -0.3634,0.4197 -0.459,0.6629 -0.0914,0.2327 -0.1527,0.5279 -0.1019,0.7649 0.0512,0.239 0.2283,0.4833 0.4079,0.6629 0.2284,0.2283 0.549,0.3668 0.8159,0.5609 0.294,0.2139 0.6686,0.3853 0.8668,0.6629 0.1417,0.1983 0.0828,0.5152 0.153,0.7648 0.0827,0.2943 0.1492,0.6111 0.3059,0.8669 0.1662,0.2711 0.4063,0.5235 0.6629,0.7139 0.2703,0.2005 0.6904,0.2314 0.9179,0.4589 0.1974,0.1974 0.2999,0.531 0.3569,0.8159 0.062,0.31 -0.0169,0.6468 0,0.9688 0.0171,0.3239 0.0221,0.6573 0.102,0.9689 0.0901,0.3513 0.3319,0.6683 0.4079,1.0198 0.06,0.2774 -0.0755,0.6025 0,0.8669 0.0605,0.2115 0.2349,0.4135 0.408,0.5609 0.2859,0.2435 0.6696,0.3773 0.9688,0.6119 0.3297,0.2584 0.608,0.5821 0.9179,0.8668 0.319,0.2932 0.6757,0.55 0.9688,0.8669 0.3358,0.363 0.7211,0.7346 0.9179,1.1728 0.1772,0.3947 0.1957,0.8825 0.2039,1.3258 0.0088,0.4745 -0.1639,0.9566 -0.1529,1.4278 0.006,0.2597 0.0212,0.6664 0.2039,0.7648 0.2592,0.1396 0.763,-0.1138 1.1219,-0.051 0.321,0.0562 0.7111,0.1914 0.9178,0.408 0.1502,0.1574 0.2099,0.5025 0.153,0.7139 -0.0621,0.2305 -0.3358,0.4116 -0.5099,0.6119 -0.1658,0.1906 -0.3784,0.3489 -0.51,0.5609 -0.1743,0.2809 -0.3329,0.5989 -0.4079,0.9178 -0.0609,0.259 0.0499,0.552 0,0.8159 -0.0691,0.365 -0.2993,0.7058 -0.3569,1.0708 -0.0444,0.2809 0.0584,0.5783 0.051,0.8669 -0.0096,0.3743 0.0069,0.7751 -0.102,1.1218 -0.078,0.2482 -0.2432,0.5307 -0.459,0.6629 -0.3111,0.1907 -0.8139,0.1067 -1.1218,0.3059 -0.27,0.1748 -0.6119,0.5471 -0.6119,0.8159 0,0.2582 0.4029,0.5141 0.6119,0.7649 0.216,0.2591 0.5096,0.4786 0.6629,0.7649 0.1016,0.1896 0.1096,0.4426 0.102,0.6629 -0.0094,0.2726 -0.1436,0.5432 -0.153,0.8158 -0.0076,0.2203 0.0279,0.4553 0.102,0.6629 0.0958,0.2683 0.3533,0.4917 0.4079,0.7649 0.0644,0.3217 -0.0509,0.6799 -0.0509,1.0198 0,0.306 -0.0222,0.6255 0.0509,0.9179 0.0799,0.3195 0.3077,0.6043 0.408,0.9178 0.0356,0.1114 0.0868,0.3204 0,0.357 -0.2361,0.0994 -0.6477,0.0172 -0.9689,0.051 -0.3247,0.0341 -0.651,0.0786 -0.9688,0.1529 -0.4811,0.1126 -0.9791,0.2142 -1.4278,0.408 -0.2992,0.1292 -0.5134,0.4502 -0.8158,0.5609 -0.3945,0.1443 -0.8475,0.166 -1.2748,0.204 -0.3376,0.03 -0.7159,0.0868 -1.0199,0 -0.1719,-0.0492 -0.2958,-0.2538 -0.4079,-0.408 -0.1598,-0.2197 -0.2481,-0.6539 -0.4079,-0.7139 -0.1122,-0.042 -0.2995,0.2513 -0.408,0.408 -0.1974,0.2852 -0.2867,0.6723 -0.5099,0.9178 -0.1167,0.1284 -0.331,0.1823 -0.5099,0.204 -0.382,0.0463 -0.7829,-0.0186 -1.1728,0 -0.3239,0.0154 -0.7261,0.2031 -0.9689,0.102 -0.1651,-0.0689 -0.1539,-0.4158 -0.2549,-0.6119 -0.188,-0.3649 -0.3826,-0.7311 -0.6119,-1.0709 -0.2296,-0.34 -0.4253,-0.7778 -0.7649,-0.9688 -0.4763,-0.2679 -1.1304,-0.2443 -1.6827,-0.4079 -0.3656,-0.1083 -0.703,-0.3541 -1.0709,-0.408 -0.329,-0.0481 -0.6793,0.0748 -1.0198,0.102 -0.5093,0.0408 -1.1013,-0.0671 -1.5297,0.102 -0.2175,0.0858 -0.3036,0.428 -0.408,0.6629 -0.0996,0.224 -0.1636,0.472 -0.2039,0.7139 -0.0277,0.1661 0.102,0.3939 0,0.5099 -0.2719,0.3089 -0.7709,0.4822 -1.1219,0.7649 -0.2609,0.2102 -0.4214,0.5939 -0.7139,0.7139 -0.3704,0.1519 -0.9614,-0.08 -1.2747,0.1019 -0.2136,0.124 -0.3407,0.5644 -0.306,0.8159 0.0333,0.2414 0.3022,0.4828 0.5099,0.6629 0.3022,0.2619 0.6564,0.5883 1.0199,0.6629 0.2993,0.0614 0.6411,-0.1962 0.9688,-0.255 0.3352,-0.0601 0.7129,-0.1908 1.0198,-0.102 0.339,0.0982 0.5869,0.4892 0.9179,0.6629 0.3489,0.1832 0.7398,0.346 1.1218,0.408 0.2469,0.04 0.5094,-0.102 0.7649,-0.102 0.3394,0 0.7287,-0.035 1.0198,0.102 0.2868,0.1349 0.5509,0.4358 0.7139,0.7139 0.1259,0.2148 0.1332,0.5082 0.153,0.7648 0.0142,0.1853 -0.08,0.3798 -0.051,0.5609 0.039,0.2438 0.149,0.4856 0.2549,0.7139 0.115,0.2477 0.2351,0.5051 0.408,0.7139 0.2351,0.2841 0.6646,0.4624 0.8158,0.7649 0.1037,0.2074 0.0483,0.5435 -0.0509,0.7649 -0.1218,0.2715 -0.3947,0.4886 -0.6119,0.7139 -0.2418,0.2506 -0.6445,0.4214 -0.7649,0.7138 -0.1176,0.2855 0.0425,0.6797 0.051,1.0199 0.0085,0.3397 0.1886,0.7604 0,1.0198 -0.6272,0.8624 -1.5601,1.7192 -2.4476,2.3456 -0.2683,0.1894 -0.6791,0.0854 -1.0199,0.102 -0.356,0.0174 -0.7436,-0.0892 -1.0708,0 -0.2337,0.0638 -0.3923,0.3348 -0.6119,0.4589 -0.1713,0.0969 -0.4207,0.2704 -0.5609,0.204 -0.1828,-0.0866 -0.2131,-0.5389 -0.4079,-0.6629 -0.1792,-0.114 -0.5342,-0.1361 -0.7139,-0.051 -0.1432,0.0678 -0.2271,0.3284 -0.255,0.5099 -0.04,0.2604 0.051,0.5439 0.051,0.8159 0,0.2889 -0.0191,0.5795 -0.051,0.8669 -0.036,0.3245 -0.1838,0.66 -0.153,0.9688 0.0202,0.2012 0.1839,0.3874 0.306,0.5609 0.2009,0.2855 0.5058,0.5089 0.6629,0.8159 0.2168,0.4238 0.3968,0.9067 0.4589,1.3768 0.0569,0.4307 0.0224,0.9143 -0.102,1.3258 -0.0966,0.3194 -0.3172,0.6412 -0.5609,0.8668 -0.2152,0.1993 -0.6875,0.1832 -0.8159,0.4079 -0.1435,0.2513 0.044,0.6859 0,1.0199 -0.041,0.3119 -0.142,0.6242 -0.2549,0.9178 -0.057,0.1483 -0.2759,0.2757 -0.255,0.408 0.0301,0.1907 0.2371,0.4114 0.408,0.5609 0.237,0.2074 0.6643,0.2732 0.8158,0.5099 0.1205,0.1882 -0.0394,0.515 0,0.7649 0.0626,0.396 0.0968,0.9846 0.306,1.1728 0.1308,0.1177 0.4679,-0.2058 0.7139,-0.255 0.3489,-0.0698 0.7528,-0.1762 1.0708,-0.102 0.1919,0.0448 0.3911,0.2707 0.4589,0.459 0.0852,0.2366 0.1112,0.6021 0,0.8158 -0.1098,0.2112 -0.4601,0.2842 -0.6629,0.459 -0.2901,0.2501 -0.5949,0.5107 -0.8158,0.8158 -0.136,0.1878 -0.2267,0.4366 -0.255,0.6629 -0.0227,0.1817 0.0045,0.4147 0.102,0.5609 0.1064,0.1597 0.3231,0.2758 0.5099,0.357 0.2042,0.0887 0.5019,0.0258 0.6629,0.1529 0.1619,0.1279 0.3463,0.4346 0.3059,0.6119 -0.0446,0.1966 -0.3457,0.385 -0.5609,0.51 -0.3117,0.181 -0.7331,0.2094 -1.0198,0.4079 -0.1552,0.1075 -0.3392,0.3687 -0.3059,0.5099 0.0347,0.1478 0.3498,0.2255 0.5099,0.357 0.3158,0.2594 0.8107,0.5658 0.9178,0.8158 0.0458,0.1069 -0.2987,0.1863 -0.4589,0.255 -0.1968,0.0843 -0.398,0.1956 -0.6119,0.204 -1.9617,0.0766 -4.2205,-0.6141 -5.9151,0.0509 -1.4669,0.5758 -2.477,2.3686 -3.5694,3.6715 -0.7603,0.9068 -1.2552,2.0406 -1.9887,2.9575 -0.2183,0.2729 -0.563,0.4323 -0.8668,0.6119 -0.4441,0.2624 -0.9327,0.4515 -1.3768,0.7139 -0.3038,0.1795 -0.5509,0.4667 -0.8669,0.6119 -0.3129,0.1438 -0.6995,0.1268 -1.0198,0.2549 -0.1896,0.0759 -0.4704,0.1724 -0.5099,0.357 -0.1134,0.5293 0.051,1.1897 0.051,1.7847 0,0.8158 -0.1111,1.6428 -0.051,2.4476 0.0249,0.334 0.1205,0.715 0.3059,0.9688 0.1375,0.1881 0.4744,0.1975 0.6629,0.357 0.2535,0.2144 0.5315,0.4691 0.6629,0.7648 0.1405,0.3162 0.1204,0.7126 0.153,1.0709 0.0184,0.2026 0.0358,0.4148 0,0.6119 -0.0322,0.1768 -0.0855,0.5161 -0.204,0.5099 -0.2045,-0.0108 -0.5206,-0.3605 -0.7648,-0.5609 -0.4187,-0.3436 -0.7627,-0.8556 -1.2238,-1.0708 -0.3037,-0.1418 -0.7368,0.1019 -1.0709,0 -0.6688,-0.2041 -1.251,-0.7931 -1.9377,-0.9179 -0.9961,-0.1811 -2.1259,-0.1758 -3.1105,0 -0.4432,0.0791 -0.7285,0.6892 -1.1728,0.7649 -1.0515,0.1792 -2.2672,-0.2251 -3.3144,0 -0.7715,0.1658 -1.3982,0.8528 -2.1417,1.1728 -0.5993,0.2579 -1.3802,0.2474 -1.8867,0.5609 -0.2074,0.1284 -0.1883,0.505 -0.2549,0.7649 -0.1034,0.403 -0.0354,0.9218 -0.255,1.2238 -0.1883,0.2589 -0.63,0.3526 -0.9688,0.4589 -0.528,0.1656 -1.1733,0.5201 -1.6318,0.3569 -0.5444,-0.1937 -0.7899,-1.2529 -1.3768,-1.4277 -1.0108,-0.3011 -2.2778,-0.0121 -3.4164,0 -0.4592,0.0049 -0.93,-0.0235 -1.3768,0.051 -0.2671,0.0445 -0.4984,0.2638 -0.7649,0.3059 -0.3794,0.0599 -0.7818,0 -1.1728,0 -0.3399,0 -0.6907,0.0564 -1.0198,0 -0.2658,-0.0456 -0.5012,-0.2494 -0.7649,-0.3059 -0.2122,-0.0455 -0.442,-0.0053 -0.6629,0 -0.493,0.0117 -0.9858,0.051 -1.4787,0.051 -0.5779,0 -1.1577,-0.0712 -1.7338,-0.051 -0.3928,0.0138 -0.8146,0.0146 -1.1728,0.1529 -0.3897,0.1506 -0.7737,0.4168 -1.0708,0.7139 -0.2808,0.2808 -0.3982,0.8274 -0.6629,1.0199 -0.1093,0.0794 -0.3039,-0.1409 -0.4589,-0.204 -0.3039,-0.1238 -0.6317,-0.3672 -0.9179,-0.3569 -0.1897,0.0067 -0.3201,0.3062 -0.5099,0.4079 -0.2861,0.1533 -0.6014,0.2937 -0.9178,0.3569 -0.2785,0.0557 -0.605,-0.0812 -0.8669,0 -0.231,0.0717 -0.4412,0.2723 -0.6119,0.459 -0.3732,0.4082 -0.7467,0.8477 -1.0198,1.3257 -0.2028,0.3549 -0.3188,0.7718 -0.408,1.1729 -0.0808,0.3638 -0.0663,0.748 -0.1019,1.1218 -0.0324,0.3401 0.0365,0.7427 -0.102,1.0198 -0.0994,0.1988 -0.3898,0.3092 -0.6119,0.4079 -0.3898,0.1733 -0.8053,0.3295 -1.2238,0.408 -0.3974,0.0745 -0.8609,-0.0793 -1.2238,0.051 -0.3,0.1076 -0.5668,0.3964 -0.7649,0.6629 -0.2948,0.3964 -0.4471,0.9033 -0.7139,1.3257 -0.1411,0.2235 -0.2841,0.496 -0.5099,0.6119 -0.4031,0.2071 -0.9238,0.2191 -1.3768,0.357 -0.3289,0.1001 -0.6965,0.1691 -0.9688,0.3569 -0.2206,0.1522 -0.4321,0.4054 -0.51,0.6629 -0.1431,0.4734 -0.0591,1.0336 -0.1529,1.5298 -0.0251,0.1327 -0.1032,0.2813 -0.204,0.3569 -0.1031,0.0774 -0.2985,0.1639 -0.4079,0.102 -0.2815,-0.1591 -0.5164,-0.5037 -0.7649,-0.7649 -0.4144,-0.4357 -0.7723,-1.0881 -1.2238,-1.3258 -0.1944,-0.1023 -0.4651,0.2498 -0.7139,0.306 -0.2781,0.0628 -0.5947,0.1105 -0.8669,0.051 -0.2717,-0.0595 -0.5206,-0.2544 -0.7648,-0.4079 -0.3507,-0.2205 -0.6374,-0.6763 -1.0199,-0.7139 -0.6544,-0.0644 -1.3874,0.321 -2.0906,0.4079 -0.8096,0.1001 -1.6313,0.1591 -2.4476,0.153 -1.4613,-0.0109 -3.1118,0.2902 -4.3853,-0.204 -1.0042,-0.3897 -1.4719,-2.0269 -2.4476,-2.4476 -0.877,-0.3781 -2.1242,0.2737 -3.1105,0.051 -1.1213,-0.2532 -2.0996,-1.2005 -3.2125,-1.4788 -0.7228,-0.1807 -1.5364,0.0178 -2.2946,0.102 -0.4656,0.0517 -0.9157,0.2759 -1.3768,0.306 -0.3207,0.0209 -0.6615,-0.0506 -0.9689,-0.153 -0.4575,-0.1525 -0.856,-0.523 -1.3257,-0.6119 -0.7881,-0.1491 -1.6618,0.0609 -2.4476,-0.102 -0.6079,-0.126 -1.1328,-0.6195 -1.7338,-0.7649 -0.4528,-0.1095 -0.979,0.0998 -1.4277,0 -0.3161,-0.0702 -0.5543,-0.4194 -0.8669,-0.5099 -0.3333,-0.0965 -0.7321,0.0359 -1.0708,-0.051 -0.3242,-0.0831 -0.5857,-0.422 -0.9179,-0.4589 -0.8916,-0.0991 -1.8726,0.1562 -2.7535,0.051 -0.2579,-0.0308 -0.4204,-0.375 -0.6629,-0.4589 -0.1994,-0.0691 -0.4453,-0.0319 -0.6629,0 -0.4793,0.0701 -0.9593,0.1767 -1.4278,0.3059 -0.5173,0.1427 -1.009,0.4313 -1.5297,0.5099 -0.3802,0.0574 -0.7905,-0.0239 -1.1729,-0.102 -0.4505,-0.0919 -0.9158,-0.2073 -1.3257,-0.4079 -0.389,-0.1903 -0.6874,-0.5578 -1.0709,-0.7649 -0.4663,-0.2518 -0.968,-0.4718 -1.4787,-0.6119 -0.5431,-0.1489 -1.1179,-0.2071 -1.6828,-0.2549 -1.6447,-0.1392 -3.298,-0.1961 -4.9462,-0.306 -1.4113,-0.0941 -2.9851,-0.0159 -4.2323,-0.3059 -0.2146,-0.0499 0.0145,-0.5674 -0.1529,-0.7139 -0.3766,-0.3295 -0.9735,-0.5064 -1.4788,-0.7139 -0.4466,-0.1834 -0.9371,-0.4589 -1.3768,-0.4589 -0.2571,0 -0.4707,0.4409 -0.7139,0.4589 -0.2157,0.016 -0.4503,-0.2241 -0.6629,-0.3569 -0.3313,-0.2072 -0.5913,-0.6183 -0.9688,-0.6629 -1.4922,-0.1764 -3.1851,0.2816 -4.6403,0 -0.6525,-0.1263 -1.0704,-0.9374 -1.6827,-1.2238 -0.4416,-0.2066 -0.9906,-0.1485 -1.4787,-0.255 -0.4467,-0.0974 -0.9263,-0.1531 -1.3258,-0.3569 -0.4334,-0.2211 -0.8198,-0.5752 -1.1728,-0.9179 -0.2249,-0.2182 -0.4412,-0.4775 -0.561,-0.7649 -0.2202,-0.5284 -0.254,-1.1436 -0.4589,-1.6827 -0.1181,-0.3108 -0.2477,-0.7013 -0.5099,-0.8669 -0.3837,-0.2423 -0.9547,-0.2279 -1.4278,-0.3569 -0.2747,-0.0749 -0.6838,-0.057 -0.8158,-0.2549 -0.174,-0.261 -0.1121,-0.7503 -0.102,-1.1219 0.0069,-0.2573 0.0515,-0.5308 0.153,-0.7648 0.1195,-0.2759 0.4345,-0.4958 0.5099,-0.7649 0.0436,-0.1559 -0.0804,-0.3485 -0.153,-0.5099 -0.2333,-0.5185 -0.4173,-1.1085 -0.7649,-1.5298 -0.2133,-0.2586 -0.5965,-0.495 -0.9178,-0.5099 -0.4096,-0.0191 -0.9274,0.4711 -1.2748,0.4079 -0.2135,-0.0388 -0.2528,-0.4889 -0.408,-0.7139 -0.1848,-0.2679 -0.3431,-0.6304 -0.6119,-0.7648 -0.3091,-0.1546 -0.9258,0.063 -1.1218,-0.102 -0.127,-0.107 0.1039,-0.4755 0.153,-0.7139 0.0699,-0.3396 0.3022,-0.7128 0.204,-1.0198 -0.1737,-0.5428 -0.878,-0.9623 -1.0199,-1.5298 -0.181,-0.7242 -0.3296,-1.8525 0.051,-2.3456 0.3672,-0.4757 1.5401,-0.2459 2.1927,-0.5609 0.3333,-0.1609 0.5394,-0.5569 0.7648,-0.8669 0.1826,-0.251 0.3795,-0.5246 0.459,-0.8159 0.0735,-0.2696 0.1145,-0.6378 0,-0.8668 -0.1065,-0.213 -0.4138,-0.3897 -0.6629,-0.4589 -0.3628,-0.1008 -0.7882,-0.0991 -1.1728,-0.051 -0.5673,0.0709 -1.157,0.1836 -1.6828,0.4079 -0.749,0.3196 -1.3805,0.947 -2.1416,1.2238 -0.7347,0.2671 -1.5845,0.2022 -2.3456,0.4079 -0.4967,0.1343 -0.9412,0.4381 -1.4278,0.6119 -0.4652,0.1662 -0.9652,0.2355 -1.4278,0.408 -0.5403,0.2014 -1.0782,0.4336 -1.5807,0.7139 -0.3813,0.2126 -0.6648,0.6701 -1.0708,0.7648 -0.6139,0.1433 -1.4651,-0.2941 -1.9887,-0.051 -0.4283,0.1989 -0.5117,1.0094 -0.8669,1.3768 -0.1377,0.1425 -0.4474,0.25 -0.6119,0.153 -0.4984,-0.2939 -0.8503,-1.0415 -1.3768,-1.3258 -0.3233,-0.1746 -0.8068,0.0622 -1.1728,-0.051 -0.5688,-0.1758 -1.054,-0.7841 -1.6317,-0.8158 -0.9691,-0.0533 -2.047,0.634 -3.0085,0.5609 -0.6023,-0.0459 -1.173,-0.9375 -1.6828,-0.9179 -0.3741,0.0144 -0.6337,0.6922 -0.9688,1.0198 -0.4298,0.4203 -0.8416,1.0212 -1.3258,1.2238 -0.2467,0.1033 -0.5949,-0.1673 -0.8668,-0.3059 -0.595,-0.3033 -1.1082,-0.9737 -1.7338,-1.0198 -0.9891,-0.0729 -2.0707,0.4566 -3.1105,0.6629 -1.1019,0.2186 -2.4357,0.1603 -3.3144,0.6119 -0.3451,0.1773 -0.0818,0.9586 -0.357,1.2747 -0.5237,0.6017 -1.6458,0.8352 -2.0396,1.4788 -0.3031,0.4952 0.1416,1.3598 -0.051,1.9377 -0.1473,0.4419 -0.7895,0.6913 -0.9689,1.1218 -0.1605,0.3854 0.1216,0.9408 -0.051,1.3258 -0.2693,0.6009 -0.8352,1.1001 -1.2748,1.6317 -0.2912,0.3523 -0.5461,0.8839 -0.9178,1.0199 -0.3252,0.1189 -0.7769,-0.2422 -1.1728,-0.255 -0.658,-0.0212 -1.3251,0.1161 -1.9887,0.153 -0.5602,0.0311 -1.1669,0.1631 -1.6827,0.051 -0.2661,-0.0579 -0.4086,-0.4374 -0.6629,-0.5609 -0.3406,-0.1654 -0.7619,-0.1664 -1.1218,-0.306 -0.473,-0.1834 -0.8954,-0.5202 -1.3768,-0.6629 -0.4365,-0.1293 -1.1741,0.0498 -1.3768,-0.1529 -0.1372,-0.1373 0.2705,-0.5683 0.3569,-0.8669 0.1006,-0.3473 0.3139,-0.8611 0.204,-1.0708 -0.0771,-0.1472 -0.5765,0.1146 -0.7649,0 -0.2025,-0.1233 -0.2378,-0.5013 -0.4079,-0.7139 -0.3059,-0.3823 -0.6141,-0.8776 -1.0198,-1.0708 -0.3082,-0.1468 -0.7698,-0.0526 -1.1219,0.0509 -0.5148,0.1515 -0.9607,0.5611 -1.4787,0.7139 -0.5188,0.1531 -1.0881,0.204 -1.6318,0.204 -0.5102,0 -1.0242,-0.1121 -1.5297,-0.204 -0.4294,-0.078 -0.9392,-0.0792 -1.2748,-0.3059 -0.2933,-0.1982 -0.5088,-0.6167 -0.6119,-0.9689 -0.1009,-0.3447 -0.0799,-0.7667 0,-1.1218 0.0731,-0.3248 0.3097,-0.6101 0.4589,-0.9178 0.1228,-0.2532 0.3658,-0.5173 0.357,-0.7649 -0.0082,-0.2283 -0.2271,-0.482 -0.408,-0.6629 -0.346,-0.3461 -0.8484,-0.5553 -1.1728,-0.9179 -0.2535,-0.2833 -0.315,-0.7278 -0.5609,-1.0198 -0.298,-0.3539 -0.6667,-0.7863 -1.0708,-0.9178 -0.3267,-0.1064 -0.8199,0.0048 -1.1218,0.2039 -0.4969,0.3278 -0.882,0.8916 -1.2748,1.3768 -0.4741,0.5856 -0.7629,1.4604 -1.3258,1.8357 -0.3549,0.2366 -1.0697,-0.2082 -1.4278,0 -0.3728,0.2168 -0.6099,0.8197 -0.7649,1.2748 -0.117,0.3438 0.1243,0.8464 -0.051,1.1218 -0.1816,0.2855 -0.6664,0.4025 -1.0198,0.5609 -0.6325,0.2836 -1.2832,0.5358 -1.9377,0.7649 -0.3653,0.1279 -0.7671,0.3554 -1.1218,0.306 -0.3762,-0.0525 -0.7209,-0.3966 -1.0708,-0.6119 -0.313,-0.1926 -0.6737,-0.3468 -0.9179,-0.6119 -0.3507,-0.3808 -0.5099,-0.9506 -0.8668,-1.3258 -0.306,-0.3217 -0.7479,-0.51 -1.1219,-0.7649z" + nodetypes="cssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" /> + </g> +</svg> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/index.html b/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/index.html new file mode 100644 index 00000000..8ffacc84 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/svg-area-heatmap/index.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>SvgAreaHeatmap Plugin Example</title> + <style> + body, html { margin:0; padding:0; height:100%; font-family:Arial;} + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; } + #heatmapContainer { width:100%; height:100%;} + h1 { position:absolute; background:black; color:white; padding:10px; font-weight:200;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; border:1px solid rgba(0,0,0,.2);} + img { background:black; } + </style> + </head> + <body> + + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + + </div> + <h1>Adding datapoints in real time with heatmap.js</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="/build/heatmap.js"></script> + <script src="/plugins/svg-area-heatmap.js"></script> + <script> + window.onload = function() { + // create heatmap instance + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + svgUrl: 'austria.svg', + plugin: 'SvgAreaHeatmap' + }); + + window.heatmap = heatmap; + + window.randomize = function(){ + var max = (Math.random()*100) >> 0; + + var dataPoints = []; + var dataKeys = ['oberoesterreich', 'niederoesterreich', 'wien', 'burgenland', 'kaernten', 'steiermark', 'tirol', 'vorarlberg', 'salzburg']; + + for (var i = 0; i < dataKeys.length; i++) { + dataPoints.push({ id: dataKeys[i], value: max - (Math.random() * max/2) >> 0 }); + } + + heatmap.setData({ + max: max, + min: 0, + data: dataPoints + }); + + + }; + randomize(); + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/examples/unblurred-datapoints/index.html b/static/js/libs/heatmap.js-2.0.5/examples/unblurred-datapoints/index.html new file mode 100644 index 00000000..ca2aa5ab --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/examples/unblurred-datapoints/index.html @@ -0,0 +1,87 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Unblurred Overlapping Datapoints with heatmap.js</title> + <style> + body, html, h2 { margin:0; padding:0; height:100%;} + body { font-family:sans-serif; } + body * { font-weight:200;} + #heatmapContainerWrapper { width:100%; height:100%; position:absolute; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + #heatmapLegend { background:white; position:absolute; bottom:0; right:0; padding:10px; } + #min { float:left; } + #max { float:right; } + h1 { position:absolute; background:black; color:white; padding:10px;} + #all-examples-info { position:absolute; background:white; font-size:16px; padding:20px; top:100px; width:350px; line-height:150%; } + </style> + </head> + <body> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <h1>Unblurred Overlapping Datapoints with heatmap.js</h1> + <div id="all-examples-info"> + <strong style="font-weight:bold;line-height:200%;font-size:18px;">Looking for more examples?</strong> <br />Check out the full <a href="http://www.patrick-wied.at/static/heatmapjs/examples.html?utm_source=gh_local" target="_blank">list of all heatmap.js examples</a> with more pointers & inline documentation. + </div> + <script src="/build/heatmap.js"></script> + <script> + window.onload = function() { + // helper function + function $(id) { + return document.getElementById(id); + }; + + + // create a heatmap instance + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + opacity:.7, + radius: 10, + // this line makes datapoints unblurred + blur: 0 + }); + + // boundaries for data generation + var width = (+window.getComputedStyle(document.body).width.replace(/px/,'')); + var height = (+window.getComputedStyle(document.body).height.replace(/px/,'')); + + // generate 1000 datapoints + var generate = function() { + // randomly generate extremas + var extremas = [(Math.random() * 100) >> 0,(Math.random() * 100) >> 0]; + var max = Math.max.apply(Math, extremas); + var min = Math.min.apply(Math,extremas); + var t = []; + + + for (var i = 0; i < 400; i++) { + var x = (Math.random()* width) >> 0; + var y = (Math.random()* height) >> 0; + var c = ((Math.random()* max-min) >> 0) + min; + // btw, we can set a radius on a point basis + var r = 40; //(Math.random()* 30) >> 0; + // add to dataset + t.push({ x: x, y:y, value: c, radius: r }); + } + var init = +new Date; + // set the generated dataset + heatmap.setData({ + min: min, + max: max, + data: t + }); + console.log('took ', (+new Date) - init, 'ms'); + }; + // initial generate + generate(); + + // whenever a user clicks on the ContainerWrapper the data will be regenerated -> new max & min + document.getElementById('heatmapContainerWrapper').onclick = function() { generate(); }; + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/package.json b/static/js/libs/heatmap.js-2.0.5/package.json new file mode 100644 index 00000000..498f1a09 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/package.json @@ -0,0 +1,46 @@ +{ + "name": "heatmap.js", + "version": "2.0.5", + "description": "Dynamic JavaScript Heatmaps for the Web", + "homepage": "https://www.patrick-wied.at/static/heatmapjs/", + "author": { + "name": "Patrick Wied", + "email": "heatmapjs@patrick-wied.at", + "url": "https://www.patrick-wied.at/" + }, + "main": "build/heatmap.js", + "devDependencies": { + "grunt": ">= 0.4.1", + "coffee-script": ">= 1.6.3", + "grunt-contrib-uglify": ">= 0.2.0", + "grunt-contrib-concat": ">= 0.1.3", + "grunt-contrib-watch": "0.2.0rc7", + "grunt-contrib-jshint": ">= 0.3.0" + }, + "keywords": [ + "heatmap", + "heatmaps", + "heat map", + "heat maps", + "googlemaps heatmap", + "leaflet heatmap", + "leaflet" + ], + "files": [ + "build", + "plugins", + "examples", + "docs", + "package.json", + "LICENSE", + "README.md" + ], + "buildFiles": [ + "src/config.js", + "src/data.js", + "src/renderer/canvas2d.js", + "src/renderer.js", + "src/util.js", + "src/core.js" + ] +} diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/angular-heatmap/angular-heatmap.js b/static/js/libs/heatmap.js-2.0.5/plugins/angular-heatmap/angular-heatmap.js new file mode 100644 index 00000000..8cf4de9b --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/angular-heatmap/angular-heatmap.js @@ -0,0 +1,62 @@ +/* + * Angular Heatmap Directive + * + * Copyright 2008-2016 Patrick Wied <heatmapjs@patrick-wied.at> - All rights reserved. + * Dual licensed under MIT and Beerware license + * + */ +(function() { + + 'use strict'; + + angular.module('heatmap', []) + .directive('heatmap', ['$heatmap', function($heatmap) { + return { + restrict: 'AE', + scope: { + 'data': '=', + 'config': '=' + }, + link: function(scope, el, attrs) { + var domEl = el[0]; + var computed = window.getComputedStyle(domEl); + var defaultCfg = { + width: +attrs['width'] || +computed['width'].replace('px',''), + height: +attrs['height'] || +computed['height'].replace('px','') + }; + var cfg = angular.merge({}, defaultCfg, scope['config'] || {}); + cfg.container = domEl; + var heatmapInstance = h337.create(cfg); + + scope.heatmapInstance = heatmapInstance; + $heatmap.registerInstance(attrs.id || (+new Date)+'', heatmapInstance); + }, + controller: function($scope) { + $scope.$watch('config', function(nu, old) { + if (nu == old) { + return; + } + $scope.heatmapInstance.configure(nu); + }); + $scope.$watch('data', function(nu, old) { + $scope.heatmapInstance.setData(nu); + }, true); + } + } + }]) + .service('$heatmap', [function() { + var instances = {}; + return { + registerInstance: function(key, value) { + instances[key] = value; + }, + getInstance: function(key) { + return instances[key]; + }, + getAllInstances: function() { + return instances; + } + }; + }]); + +})(); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/boilerplate.js b/static/js/libs/heatmap.js-2.0.5/plugins/boilerplate.js new file mode 100644 index 00000000..79452977 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/boilerplate.js @@ -0,0 +1,45 @@ +(function() { + 'use strict'; + + var boilerplatePlugin = (function BoilerplatePluginClosure() { + + function BoilerplateStore(config) { + this._coordinator = {}; + this._data = []; + this._max = 1; + this._min = 0; + }; + + BoilerplateStore.prototype = { + setCoordinator: function(coordinator) { + + }, + setData: function(data) { + + }, + addData: function(data) { + + }, + removeData: function(data) { + + }, + getData: function() { + + } + }; + + + + function BoilerplateRenderer(config) { + + }; + + return { + store: BoilerplateStore, + renderer: BoilerplateRenderer + } + }()); + + h337.register('boilerplate', boilerplatePlugin); + +}()); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/README.md b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/README.md new file mode 100644 index 00000000..d4d7090d --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/README.md @@ -0,0 +1,7 @@ +This is a heatmap.js plugin to visualize data as a heatmap overlay in Google Maps. + + +Learn more about how to use heatmap.js and this overlay implementation on the [heatmap website](https://www.patrick-wied.at/static/heatmapjs/?utm_source=npm_gmaps&utm_medium=web) + + +Google Maps is a trademark of Google Inc. The gmaps-heatmap.js overlay implementation is in no way sponsored or affiliated with Google Inc. \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/gmaps-heatmap.js b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/gmaps-heatmap.js new file mode 100644 index 00000000..a8df9715 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/gmaps-heatmap.js @@ -0,0 +1,278 @@ +/* +* heatmap.js Google Maps Overlay +* +* Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +;(function (name, context, factory) { + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + module.exports = factory( + require('heatmap.js'), + require('google-maps') + ); + } else if (typeof define === "function" && define.amd) { + define(['heatmap.js', 'google-maps'], factory); + } else { + // browser globals + if (typeof window.h337 === 'undefined') { + throw new Error('heatmap.js must be loaded before the gmaps heatmap plugin'); + } + if (typeof window.google === 'undefined') { + throw new Error('Google Maps must be loaded before the gmaps heatmap plugin'); + } + context[name] = factory(window.h337, window.google.maps); + } + +})("HeatmapOverlay", this, function(h337, gmaps) { + 'use strict'; + + var HeatmapOverlay = function(map, cfg){ + this.setMap(map); + this.initialize(cfg || {}); + }; + + HeatmapOverlay.prototype = new gmaps.OverlayView(); + + HeatmapOverlay.CSS_TRANSFORM = (function() { + var div = document.createElement('div'); + var props = [ + 'transform', + 'WebkitTransform', + 'MozTransform', + 'OTransform', + 'msTransform' + ]; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (div.style[prop] !== undefined) { + return prop; + } + } + + return props[0]; + })(); + + HeatmapOverlay.prototype.initialize = function(cfg) { + this.cfg = cfg; + + var map = this.map = this.getMap(); + var container = this.container = document.createElement('div'); + var mapDiv = map.getDiv(); + var width = this.width = mapDiv.clientWidth; + var height = this.height = mapDiv.clientHeight; + + container.style.cssText = 'width:' + width +'px;height:' + height+'px;'; + + this.data = []; + this.max = 1; + this.min = 0; + + cfg.container = container; + }; + + HeatmapOverlay.prototype.onAdd = function(){ + var that = this; + + this.getPanes().overlayLayer.appendChild(this.container); + + + this.changeHandler = gmaps.event.addListener( + this.map, + 'bounds_changed', + function() { return that.draw(); } + ); + + if (!this.heatmap) { + this.heatmap = h337.create(this.cfg); + } + this.draw(); + }; + + HeatmapOverlay.prototype.onRemove = function() { + if (!this.map) { return; } + + this.map = null; + + this.container.parentElement.removeChild(this.container); + + if (this.changeHandler) { + gmaps.event.removeListener(this.changeHandler); + this.changeHandler = null; + } + + }; + + HeatmapOverlay.prototype.draw = function() { + if (!this.map) { return; } + + var bounds = this.map.getBounds(); + + var topLeft = new gmaps.LatLng( + bounds.getNorthEast().lat(), + bounds.getSouthWest().lng() + ); + + var projection = this.getProjection(); + var point = projection.fromLatLngToDivPixel(topLeft); + + this.container.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' + + Math.round(point.x) + 'px,' + + Math.round(point.y) + 'px)'; + + this.update(); + }; + + HeatmapOverlay.prototype.resize = function() { + + if (!this.map){ return; } + + var div = this.map.getDiv(), + width = div.clientWidth, + height = div.clientHeight; + + if (width == this.width && height == this.height){ return; } + + this.width = width; + this.height = height; + + // update heatmap dimensions + this.heatmap._renderer.setDimensions(width, height); + // then redraw all datapoints with update + this.update(); + }; + + HeatmapOverlay.prototype.update = function() { + var projection = this.getProjection(), + zoom, scale, bounds, topLeft; + var generatedData = { max: this.max, min: this.min, data: [] }; + + if (!projection){ return; } + + bounds = this.map.getBounds(); + + topLeft = new gmaps.LatLng( + bounds.getNorthEast().lat(), + bounds.getSouthWest().lng() + ); + + zoom = this.map.getZoom(); + scale = Math.pow(2, zoom); + + this.resize(); + + if (this.data.length == 0) { + if (this.heatmap) { + this.heatmap.setData(generatedData); + } + return; + } + + + var latLngPoints = []; + // iterate through data + var len = this.data.length; + var layerProjection = this.getProjection(); + var layerOffset = layerProjection.fromLatLngToDivPixel(topLeft); + var radiusMultiplier = this.cfg.scaleRadius ? scale : 1; + var localMax = 0; + var localMin = 0; + var valueField = this.cfg.valueField; + + + while (len--) { + var entry = this.data[len]; + var value = entry[valueField]; + var latlng = entry.latlng; + + + // we don't wanna render points that are not even on the map ;-) + if (!bounds.contains(latlng)) { + continue; + } + // local max is the maximum within current bounds + localMax = Math.max(value, localMax); + localMin = Math.min(value, localMin); + + var point = layerProjection.fromLatLngToDivPixel(latlng); + var latlngPoint = { x: Math.round(point.x - layerOffset.x), y: Math.round(point.y - layerOffset.y) }; + latlngPoint[valueField] = value; + + var radius; + + if (entry.radius) { + radius = entry.radius * radiusMultiplier; + } else { + radius = (this.cfg.radius || 2) * radiusMultiplier; + } + latlngPoint.radius = radius; + latLngPoints.push(latlngPoint); + } + if (this.cfg.useLocalExtrema) { + generatedData.max = localMax; + generatedData.min = localMin; + } + + generatedData.data = latLngPoints; + + this.heatmap.setData(generatedData); + + }; + + HeatmapOverlay.prototype.setData = function(data) { + this.max = data.max; + this.min = data.min; + + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + + // transform data to latlngs + var data = data.data; + var len = data.length; + var d = []; + + while (len--) { + var entry = data[len]; + var latlng = new gmaps.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + d.push(dataObj); + } + this.data = d; + this.update(); + }; + // experimential. not ready yet. + HeatmapOverlay.prototype.addData = function(pointOrArray) { + if (pointOrArray.length > 0) { + var len = pointOrArray.length; + while(len--) { + this.addData(pointOrArray[len]); + } + } else { + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + var entry = pointOrArray; + var latlng = new gmaps.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + this.max = Math.max(this.max, dataObj[valueField]); + this.min = Math.min(this.min, dataObj[valueField]); + this.data.push(dataObj); + this.update(); + } + }; + + return HeatmapOverlay; + +}); diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/package.json b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/package.json new file mode 100644 index 00000000..b751fb9f --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/gmaps-heatmap/package.json @@ -0,0 +1,23 @@ +{ + "name": "gmaps-heatmap", + "version": "1.0.2", + "description": "heatmap.js Google Maps Overlay", + "homepage": "https://www.patrick-wied.at/static/heatmapjs/", + "main": "gmaps-heatmap.js", + "dependencies": { + "heatmap.js": "*", + "google-maps": "*" + }, + "keywords": [ + "heatmap", + "google maps", + "googlemaps", + "gmaps", + "heat", + "heat map", + "heatmaps", + "heat maps", + "map", + "maps" + ] +} diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/README.md b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/README.md new file mode 100644 index 00000000..4eee7678 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/README.md @@ -0,0 +1,4 @@ +This is a heatmap.js plugin to visualize data as a **heatmap overlay with Leaflet**. + + +Learn more about how to use heatmap.js and this overlay implementation on the [heatmap website](https://www.patrick-wied.at/static/heatmapjs/?utm_source=npm_leaflet&utm_medium=web) \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/leaflet-heatmap.js b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/leaflet-heatmap.js new file mode 100644 index 00000000..5f93f0b6 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/leaflet-heatmap.js @@ -0,0 +1,246 @@ +/* +* Leaflet Heatmap Overlay +* +* Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +;(function (name, context, factory) { + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + module.exports = factory( + require('heatmap.js'), + require('leaflet') + ); + } else if (typeof define === "function" && define.amd) { + define(['heatmap.js', 'leaflet'], factory); + } else { + // browser globals + if (typeof window.h337 === 'undefined') { + throw new Error('heatmap.js must be loaded before the leaflet heatmap plugin'); + } + if (typeof window.L === 'undefined') { + throw new Error('Leaflet must be loaded before the leaflet heatmap plugin'); + } + context[name] = factory(window.h337, window.L); + } + +})("HeatmapOverlay", this, function (h337, L) { + 'use strict'; + + // Leaflet < 0.8 compatibility + if (typeof L.Layer === 'undefined') { + L.Layer = L.Class; + } + + var HeatmapOverlay = L.Layer.extend({ + + initialize: function (config) { + this.cfg = config; + this._el = L.DomUtil.create('div', 'leaflet-zoom-hide'); + this._data = []; + this._max = 1; + this._min = 0; + this.cfg.container = this._el; + }, + + onAdd: function (map) { + var size = map.getSize(); + + this._map = map; + + this._width = size.x; + this._height = size.y; + + this._el.style.width = size.x + 'px'; + this._el.style.height = size.y + 'px'; + this._el.style.position = 'absolute'; + + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + map.getPanes().overlayPane.appendChild(this._el); + + if (!this._heatmap) { + this._heatmap = h337.create(this.cfg); + } + + // this resets the origin and redraws whenever + // the zoom changed or the map has been moved + map.on('moveend', this._reset, this); + this._draw(); + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + // remove layer's DOM elements and listeners + map.getPanes().overlayPane.removeChild(this._el); + + map.off('moveend', this._reset, this); + }, + _draw: function() { + if (!this._map) { return; } + + var mapPane = this._map.getPanes().mapPane; + var point = mapPane._leaflet_pos; + + // reposition the layer + this._el.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' + + -Math.round(point.x) + 'px,' + + -Math.round(point.y) + 'px)'; + + this._update(); + }, + _update: function() { + var bounds, zoom, scale; + var generatedData = { max: this._max, min: this._min, data: [] }; + + bounds = this._map.getBounds(); + zoom = this._map.getZoom(); + scale = Math.pow(2, zoom); + + if (this._data.length == 0) { + if (this._heatmap) { + this._heatmap.setData(generatedData); + } + return; + } + + + var latLngPoints = []; + var radiusMultiplier = this.cfg.scaleRadius ? scale : 1; + var localMax = 0; + var localMin = 0; + var valueField = this.cfg.valueField; + var len = this._data.length; + + while (len--) { + var entry = this._data[len]; + var value = entry[valueField]; + var latlng = entry.latlng; + + + // we don't wanna render points that are not even on the map ;-) + if (!bounds.contains(latlng)) { + continue; + } + // local max is the maximum within current bounds + localMax = Math.max(value, localMax); + localMin = Math.min(value, localMin); + + var point = this._map.latLngToContainerPoint(latlng); + var latlngPoint = { x: Math.round(point.x), y: Math.round(point.y) }; + latlngPoint[valueField] = value; + + var radius; + + if (entry.radius) { + radius = entry.radius * radiusMultiplier; + } else { + radius = (this.cfg.radius || 2) * radiusMultiplier; + } + latlngPoint.radius = radius; + latLngPoints.push(latlngPoint); + } + if (this.cfg.useLocalExtrema) { + generatedData.max = localMax; + generatedData.min = localMin; + } + + generatedData.data = latLngPoints; + + this._heatmap.setData(generatedData); + }, + setData: function(data) { + this._max = data.max || this._max; + this._min = data.min || this._min; + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + + // transform data to latlngs + var data = data.data; + var len = data.length; + var d = []; + + while (len--) { + var entry = data[len]; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + d.push(dataObj); + } + this._data = d; + + this._draw(); + }, + // experimential... not ready. + addData: function(pointOrArray) { + if (pointOrArray.length > 0) { + var len = pointOrArray.length; + while(len--) { + this.addData(pointOrArray[len]); + } + } else { + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + var entry = pointOrArray; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + + dataObj[valueField] = entry[valueField]; + this._max = Math.max(this._max, dataObj[valueField]); + this._min = Math.min(this._min, dataObj[valueField]); + + if (entry.radius) { + dataObj.radius = entry.radius; + } + this._data.push(dataObj); + this._draw(); + } + }, + _reset: function () { + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + var size = this._map.getSize(); + if (this._width !== size.x || this._height !== size.y) { + this._width = size.x; + this._height = size.y; + + this._el.style.width = this._width + 'px'; + this._el.style.height = this._height + 'px'; + + this._heatmap._renderer.setDimensions(this._width, this._height); + } + this._draw(); + } + }); + + HeatmapOverlay.CSS_TRANSFORM = (function() { + var div = document.createElement('div'); + var props = [ + 'transform', + 'WebkitTransform', + 'MozTransform', + 'OTransform', + 'msTransform' + ]; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (div.style[prop] !== undefined) { + return prop; + } + } + return props[0]; + })(); + + return HeatmapOverlay; +}); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/package.json b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/package.json new file mode 100644 index 00000000..d926ae2c --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/package.json @@ -0,0 +1,21 @@ +{ + "name": "leaflet-heatmap", + "version": "1.0.0", + "description": "heatmap.js Leaflet Overlay", + "homepage": "https://www.patrick-wied.at/static/heatmapjs/", + "main": "leaflet-heatmap.js", + "dependencies": { + "heatmap.js": "*", + "leaflet": "*" + }, + "keywords": [ + "heatmap", + "leaflet", + "heat", + "heat map", + "heatmaps", + "heat maps", + "map", + "maps" + ] +} diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/segment-heatmap.js b/static/js/libs/heatmap.js-2.0.5/plugins/segment-heatmap.js new file mode 100644 index 00000000..3b4b604b --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/segment-heatmap.js @@ -0,0 +1,71 @@ +(function() { + 'use strict'; + + var segmentHeatmapPlugin = (function SegmentHeatmapPluginClosure() { + + var defaultSegmentsX = 10; + var defaultSegmentsY = 5; + + function SegmentStore(config) { + this._coordinator = {}; + this._data = []; + this._max = 1; + this._min = 0; + this._initSegments(); + }; + + SegmentStore.prototype = { + _initSegments: function() { + + }, + setCoordinator: function(coordinator) { + + }, + setData: function(data) { + var max = data.max; + var min = data.min; + var data = data.data; + + this._coordinator.emit('renderall', { + min: min, + max: max, + data: data + }); + }, + addData: function(data) { + + }, + removeData: function(data) { + + }, + getData: function() { + return this._data; + } + }; + + + + function SegmentRenderer(config) { + + }; + SegmentRenderer.prototype = { + renderAll: function(data) { + + }, + renderPartial: function(data) { + + }, + getDataURL: function() { + + } + }; + + return { + store: SegmentStore, + renderer: SegmentRenderer + } + }()); + + h337.register('segment-heatmap', segmentHeatmapPlugin); + +}()); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/plugins/svg-area-heatmap.js b/static/js/libs/heatmap.js-2.0.5/plugins/svg-area-heatmap.js new file mode 100644 index 00000000..5da7fe34 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/plugins/svg-area-heatmap.js @@ -0,0 +1,195 @@ +/* +* SVG Area Heatmap Plugin +* +* Copyright (c) 2014, Patrick Wied (http://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +(function() { + 'use strict'; + + var SvgAreaHeatmap = (function SvgAreaHeatmapClosure() { + + var _getColorPalette = function(config) { + var gradientConfig = config.gradient || config.defaultGradient; + var paletteCanvas = document.createElement('canvas'); + var paletteCtx = paletteCanvas.getContext('2d'); + + paletteCanvas.width = 256; + paletteCanvas.height = 1; + + var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); + for (var key in gradientConfig) { + gradient.addColorStop(key, gradientConfig[key]); + } + + paletteCtx.fillStyle = gradient; + paletteCtx.fillRect(0, 0, 256, 1); + + return paletteCtx.getImageData(0, 0, 256, 1).data; + }; + + + function SvgAreaHeatmapStore(config) { + this._coordinator = {}; + this._data = {}; + this._max = 1; + this._min = 0; + }; + + SvgAreaHeatmapStore.prototype = { + setCoordinator: function(coordinator) { + this._coordinator = coordinator; + }, + setData: function(data) { + this._max = data.max || this._max; + this._min = data.min || this._min; + this._data = {}; + + var d = data.data; + var dataLen = d.length; + + while (dataLen--) { + this._organiseData(d[dataLen]); + } + + this._coordinator.emit('renderall', this._getInternalData()); + }, + addData: function(data) { + var organisedEntry = this._organiseData(data); + if (organisedEntry) { + this._coordinator.emit('renderpartial', { + min: this._min, + max: this._max, + data: [organisedEntry] + }); + } + }, + updateData: function(data) { + + }, + removeData: function(data) { + + }, + getData: function() { + + }, + setDataMax: function(max) { + this._max = max; + //this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + setDataMin: function(min) { + this._min = min; + //this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + _organiseData: function(point) { + if (this._data[point.id]) { + this._data[point.id] += point.value; + + } else { + this._data[point.id] = point.value; + } + + if (this._data[point.id] > this._max) { + this.setDataMax(this._data[point.id]); + } + if (this._data[point.id] < this._min) { + this.setDataMin(this._data[point.id]); + } + return point; + }, + _getInternalData: function() { + return { + max: this._max, + min: this._min, + data: this._data, + }; + } + }; + + + function SvgAreaHeatmapRenderer(config) { + // initialization + var container = config.container; + var svgUrl = config.svgUrl; + this.renderQueue = []; + + + var svgObj = document.createElement('object'); + svgObj.type = 'image/svg+xml'; + svgObj.id = 'svgHeatmap'; + svgObj.data = svgUrl; + + var that = this; + + svgObj.onload = function() { + that.svgDoc = this.getSVGDocument(); + that.$ = function(selector) { + return that.svgDoc.querySelector(selector); + }; + + that._processQueue(); + } + + container.appendChild(svgObj); + + this._palette = _getColorPalette(config); + + }; + + SvgAreaHeatmapRenderer.prototype = { + renderPartial: function(data) { + var point = data.data[0]; + this.max = data.max; + this.min = data.min; + this._colorize(point.id, point.value); + }, + renderAll: function(data) { + var points = data.data; + this.max = data.max; + this.min = data.min; + for (var key in points) { + this._colorize(key, points[key]); + } + }, + _colorize: function(key, value) { + + if (!this.svgDoc) { + this.renderQueue.push([key, value]); + } else { + var node = this.$('#' + key); + var color; + var max = this.max; + var min = this.min; + var colorIndex = (((value/(Math.abs(max-min)) * 255) >> 0) * 4); + + var r = this._palette[colorIndex]; + var g = this._palette[colorIndex + 1]; + var b = this._palette[colorIndex + 2]; + + node.style.fill = ['rgb(', r, ',', g, ',', b,')'].join(''); + } + }, + _processQueue: function() { + var renderElement = this.renderQueue.pop(); + if (!renderElement) { + return; + } + this._colorize.apply(this, renderElement); + this._processQueue(); + } + }; + + return { + store: SvgAreaHeatmapStore, + renderer: SvgAreaHeatmapRenderer + } + }()); + + h337.register('SvgAreaHeatmap', SvgAreaHeatmap); + +}()); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/config.js b/static/js/libs/heatmap.js-2.0.5/src/config.js new file mode 100644 index 00000000..a4c65785 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/config.js @@ -0,0 +1,14 @@ + +// Heatmap Config stores default values and will be merged with instance config +var HeatmapConfig = { + defaultRadius: 40, + defaultRenderer: 'canvas2d', + defaultGradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + defaultMaxOpacity: 1, + defaultMinOpacity: 0, + defaultBlur: .85, + defaultXField: 'x', + defaultYField: 'y', + defaultValueField: 'value', + plugins: {} +}; \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/core.js b/static/js/libs/heatmap.js-2.0.5/src/core.js new file mode 100644 index 00000000..633a1cf5 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/core.js @@ -0,0 +1,142 @@ +// Heatmap Constructor +var Heatmap = (function HeatmapClosure() { + + var Coordinator = (function CoordinatorClosure() { + + function Coordinator() { + this.cStore = {}; + }; + + Coordinator.prototype = { + on: function(evtName, callback, scope) { + var cStore = this.cStore; + + if (!cStore[evtName]) { + cStore[evtName] = []; + } + cStore[evtName].push((function(data) { + return callback.call(scope, data); + })); + }, + emit: function(evtName, data) { + var cStore = this.cStore; + if (cStore[evtName]) { + var len = cStore[evtName].length; + for (var i=0; i<len; i++) { + var callback = cStore[evtName][i]; + callback(data); + } + } + } + }; + + return Coordinator; + })(); + + + var _connect = function(scope) { + var renderer = scope._renderer; + var coordinator = scope._coordinator; + var store = scope._store; + + coordinator.on('renderpartial', renderer.renderPartial, renderer); + coordinator.on('renderall', renderer.renderAll, renderer); + coordinator.on('extremachange', function(data) { + scope._config.onExtremaChange && + scope._config.onExtremaChange({ + min: data.min, + max: data.max, + gradient: scope._config['gradient'] || scope._config['defaultGradient'] + }); + }); + store.setCoordinator(coordinator); + }; + + + function Heatmap() { + var config = this._config = Util.merge(HeatmapConfig, arguments[0] || {}); + this._coordinator = new Coordinator(); + if (config['plugin']) { + var pluginToLoad = config['plugin']; + if (!HeatmapConfig.plugins[pluginToLoad]) { + throw new Error('Plugin \''+ pluginToLoad + '\' not found. Maybe it was not registered.'); + } else { + var plugin = HeatmapConfig.plugins[pluginToLoad]; + // set plugin renderer and store + this._renderer = new plugin.renderer(config); + this._store = new plugin.store(config); + } + } else { + this._renderer = new Renderer(config); + this._store = new Store(config); + } + _connect(this); + }; + + // @TODO: + // add API documentation + Heatmap.prototype = { + addData: function() { + this._store.addData.apply(this._store, arguments); + return this; + }, + removeData: function() { + this._store.removeData && this._store.removeData.apply(this._store, arguments); + return this; + }, + setData: function() { + this._store.setData.apply(this._store, arguments); + return this; + }, + setDataMax: function() { + this._store.setDataMax.apply(this._store, arguments); + return this; + }, + setDataMin: function() { + this._store.setDataMin.apply(this._store, arguments); + return this; + }, + configure: function(config) { + this._config = Util.merge(this._config, config); + this._renderer.updateConfig(this._config); + this._coordinator.emit('renderall', this._store._getInternalData()); + return this; + }, + repaint: function() { + this._coordinator.emit('renderall', this._store._getInternalData()); + return this; + }, + getData: function() { + return this._store.getData(); + }, + getDataURL: function() { + return this._renderer.getDataURL(); + }, + getValueAt: function(point) { + + if (this._store.getValueAt) { + return this._store.getValueAt(point); + } else if (this._renderer.getValueAt) { + return this._renderer.getValueAt(point); + } else { + return null; + } + } + }; + + return Heatmap; + +})(); + + +// core +var heatmapFactory = { + create: function(config) { + return new Heatmap(config); + }, + register: function(pluginKey, plugin) { + HeatmapConfig.plugins[pluginKey] = plugin; + } +}; + +return heatmapFactory; diff --git a/static/js/libs/heatmap.js-2.0.5/src/data.js b/static/js/libs/heatmap.js-2.0.5/src/data.js new file mode 100644 index 00000000..08d0bbb4 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/data.js @@ -0,0 +1,213 @@ +var Store = (function StoreClosure() { + + var Store = function Store(config) { + this._coordinator = {}; + this._data = []; + this._radi = []; + this._min = 10; + this._max = 1; + this._xField = config['xField'] || config.defaultXField; + this._yField = config['yField'] || config.defaultYField; + this._valueField = config['valueField'] || config.defaultValueField; + + if (config["radius"]) { + this._cfgRadius = config["radius"]; + } + }; + + var defaultRadius = HeatmapConfig.defaultRadius; + + Store.prototype = { + // when forceRender = false -> called from setData, omits renderall event + _organiseData: function(dataPoint, forceRender) { + var x = dataPoint[this._xField]; + var y = dataPoint[this._yField]; + var radi = this._radi; + var store = this._data; + var max = this._max; + var min = this._min; + var value = dataPoint[this._valueField] || 1; + var radius = dataPoint.radius || this._cfgRadius || defaultRadius; + + if (!store[x]) { + store[x] = []; + radi[x] = []; + } + + if (!store[x][y]) { + store[x][y] = value; + radi[x][y] = radius; + } else { + store[x][y] += value; + } + var storedVal = store[x][y]; + + if (storedVal > max) { + if (!forceRender) { + this._max = storedVal; + } else { + this.setDataMax(storedVal); + } + return false; + } else if (storedVal < min) { + if (!forceRender) { + this._min = storedVal; + } else { + this.setDataMin(storedVal); + } + return false; + } else { + return { + x: x, + y: y, + value: value, + radius: radius, + min: min, + max: max + }; + } + }, + _unOrganizeData: function() { + var unorganizedData = []; + var data = this._data; + var radi = this._radi; + + for (var x in data) { + for (var y in data[x]) { + + unorganizedData.push({ + x: x, + y: y, + radius: radi[x][y], + value: data[x][y] + }); + + } + } + return { + min: this._min, + max: this._max, + data: unorganizedData + }; + }, + _onExtremaChange: function() { + this._coordinator.emit('extremachange', { + min: this._min, + max: this._max + }); + }, + addData: function() { + if (arguments[0].length > 0) { + var dataArr = arguments[0]; + var dataLen = dataArr.length; + while (dataLen--) { + this.addData.call(this, dataArr[dataLen]); + } + } else { + // add to store + var organisedEntry = this._organiseData(arguments[0], true); + if (organisedEntry) { + // if it's the first datapoint initialize the extremas with it + if (this._data.length === 0) { + this._min = this._max = organisedEntry.value; + } + this._coordinator.emit('renderpartial', { + min: this._min, + max: this._max, + data: [organisedEntry] + }); + } + } + return this; + }, + setData: function(data) { + var dataPoints = data.data; + var pointsLen = dataPoints.length; + + + // reset data arrays + this._data = []; + this._radi = []; + + for(var i = 0; i < pointsLen; i++) { + this._organiseData(dataPoints[i], false); + } + this._max = data.max; + this._min = data.min || 0; + + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + removeData: function() { + // TODO: implement + }, + setDataMax: function(max) { + this._max = max; + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + setDataMin: function(min) { + this._min = min; + this._onExtremaChange(); + this._coordinator.emit('renderall', this._getInternalData()); + return this; + }, + setCoordinator: function(coordinator) { + this._coordinator = coordinator; + }, + _getInternalData: function() { + return { + max: this._max, + min: this._min, + data: this._data, + radi: this._radi + }; + }, + getData: function() { + return this._unOrganizeData(); + }/*, + + TODO: rethink. + + getValueAt: function(point) { + var value; + var radius = 100; + var x = point.x; + var y = point.y; + var data = this._data; + + if (data[x] && data[x][y]) { + return data[x][y]; + } else { + var values = []; + // radial search for datapoints based on default radius + for(var distance = 1; distance < radius; distance++) { + var neighbors = distance * 2 +1; + var startX = x - distance; + var startY = y - distance; + + for(var i = 0; i < neighbors; i++) { + for (var o = 0; o < neighbors; o++) { + if ((i == 0 || i == neighbors-1) || (o == 0 || o == neighbors-1)) { + if (data[startY+i] && data[startY+i][startX+o]) { + values.push(data[startY+i][startX+o]); + } + } else { + continue; + } + } + } + } + if (values.length > 0) { + return Math.max.apply(Math, values); + } + } + return false; + }*/ + }; + + + return Store; +})(); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/renderer.js b/static/js/libs/heatmap.js-2.0.5/src/renderer.js new file mode 100644 index 00000000..faffc7ee --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/renderer.js @@ -0,0 +1,11 @@ + +var Renderer = (function RendererClosure() { + + var rendererFn = false; + + if (HeatmapConfig['defaultRenderer'] === 'canvas2d') { + rendererFn = Canvas2dRenderer; + } + + return rendererFn; +})(); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas-webgl.js b/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas-webgl.js new file mode 100644 index 00000000..03ad760c --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas-webgl.js @@ -0,0 +1 @@ +// TO BE IMPLEMENTED \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas2d.js b/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas2d.js new file mode 100644 index 00000000..259c8d14 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/renderer/canvas2d.js @@ -0,0 +1,305 @@ + +var Canvas2dRenderer = (function Canvas2dRendererClosure() { + + var _getColorPalette = function(config) { + var gradientConfig = config.gradient || config.defaultGradient; + var paletteCanvas = document.createElement('canvas'); + var paletteCtx = paletteCanvas.getContext('2d'); + + paletteCanvas.width = 256; + paletteCanvas.height = 1; + + var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); + for (var key in gradientConfig) { + gradient.addColorStop(key, gradientConfig[key]); + } + + paletteCtx.fillStyle = gradient; + paletteCtx.fillRect(0, 0, 256, 1); + + return paletteCtx.getImageData(0, 0, 256, 1).data; + }; + + var _getPointTemplate = function(radius, blurFactor) { + var tplCanvas = document.createElement('canvas'); + var tplCtx = tplCanvas.getContext('2d'); + var x = radius; + var y = radius; + tplCanvas.width = tplCanvas.height = radius*2; + + if (blurFactor == 1) { + tplCtx.beginPath(); + tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false); + tplCtx.fillStyle = 'rgba(0,0,0,1)'; + tplCtx.fill(); + } else { + var gradient = tplCtx.createRadialGradient(x, y, radius*blurFactor, x, y, radius); + gradient.addColorStop(0, 'rgba(0,0,0,1)'); + gradient.addColorStop(1, 'rgba(0,0,0,0)'); + tplCtx.fillStyle = gradient; + tplCtx.fillRect(0, 0, 2*radius, 2*radius); + } + + + + return tplCanvas; + }; + + var _prepareData = function(data) { + var renderData = []; + var min = data.min; + var max = data.max; + var radi = data.radi; + var data = data.data; + + var xValues = Object.keys(data); + var xValuesLen = xValues.length; + + while(xValuesLen--) { + var xValue = xValues[xValuesLen]; + var yValues = Object.keys(data[xValue]); + var yValuesLen = yValues.length; + while(yValuesLen--) { + var yValue = yValues[yValuesLen]; + var value = data[xValue][yValue]; + var radius = radi[xValue][yValue]; + renderData.push({ + x: xValue, + y: yValue, + value: value, + radius: radius + }); + } + } + + return { + min: min, + max: max, + data: renderData + }; + }; + + + function Canvas2dRenderer(config) { + var container = config.container; + var shadowCanvas = this.shadowCanvas = document.createElement('canvas'); + var canvas = this.canvas = config.canvas || document.createElement('canvas'); + var renderBoundaries = this._renderBoundaries = [10000, 10000, 0, 0]; + + var computed = getComputedStyle(config.container) || {}; + + canvas.className = 'heatmap-canvas'; + + this._width = canvas.width = shadowCanvas.width = config.width || +(computed.width.replace(/px/,'')); + this._height = canvas.height = shadowCanvas.height = config.height || +(computed.height.replace(/px/,'')); + + this.shadowCtx = shadowCanvas.getContext('2d'); + this.ctx = canvas.getContext('2d'); + + // @TODO: + // conditional wrapper + + canvas.style.cssText = shadowCanvas.style.cssText = 'position:absolute;left:0;top:0;'; + + container.style.position = 'relative'; + container.appendChild(canvas); + + this._palette = _getColorPalette(config); + this._templates = {}; + + this._setStyles(config); + }; + + Canvas2dRenderer.prototype = { + renderPartial: function(data) { + if (data.data.length > 0) { + this._drawAlpha(data); + this._colorize(); + } + }, + renderAll: function(data) { + // reset render boundaries + this._clear(); + if (data.data.length > 0) { + this._drawAlpha(_prepareData(data)); + this._colorize(); + } + }, + _updateGradient: function(config) { + this._palette = _getColorPalette(config); + }, + updateConfig: function(config) { + if (config['gradient']) { + this._updateGradient(config); + } + this._setStyles(config); + }, + setDimensions: function(width, height) { + this._width = width; + this._height = height; + this.canvas.width = this.shadowCanvas.width = width; + this.canvas.height = this.shadowCanvas.height = height; + }, + _clear: function() { + this.shadowCtx.clearRect(0, 0, this._width, this._height); + this.ctx.clearRect(0, 0, this._width, this._height); + }, + _setStyles: function(config) { + this._blur = (config.blur == 0)?0:(config.blur || config.defaultBlur); + + if (config.backgroundColor) { + this.canvas.style.backgroundColor = config.backgroundColor; + } + + this._width = this.canvas.width = this.shadowCanvas.width = config.width || this._width; + this._height = this.canvas.height = this.shadowCanvas.height = config.height || this._height; + + + this._opacity = (config.opacity || 0) * 255; + this._maxOpacity = (config.maxOpacity || config.defaultMaxOpacity) * 255; + this._minOpacity = (config.minOpacity || config.defaultMinOpacity) * 255; + this._useGradientOpacity = !!config.useGradientOpacity; + }, + _drawAlpha: function(data) { + var min = this._min = data.min; + var max = this._max = data.max; + var data = data.data || []; + var dataLen = data.length; + // on a point basis? + var blur = 1 - this._blur; + + while(dataLen--) { + + var point = data[dataLen]; + + var x = point.x; + var y = point.y; + var radius = point.radius; + // if value is bigger than max + // use max as value + var value = Math.min(point.value, max); + var rectX = x - radius; + var rectY = y - radius; + var shadowCtx = this.shadowCtx; + + + + + var tpl; + if (!this._templates[radius]) { + this._templates[radius] = tpl = _getPointTemplate(radius, blur); + } else { + tpl = this._templates[radius]; + } + // value from minimum / value range + // => [0, 1] + var templateAlpha = (value-min)/(max-min); + // this fixes #176: small values are not visible because globalAlpha < .01 cannot be read from imageData + shadowCtx.globalAlpha = templateAlpha < .01 ? .01 : templateAlpha; + + shadowCtx.drawImage(tpl, rectX, rectY); + + // update renderBoundaries + if (rectX < this._renderBoundaries[0]) { + this._renderBoundaries[0] = rectX; + } + if (rectY < this._renderBoundaries[1]) { + this._renderBoundaries[1] = rectY; + } + if (rectX + 2*radius > this._renderBoundaries[2]) { + this._renderBoundaries[2] = rectX + 2*radius; + } + if (rectY + 2*radius > this._renderBoundaries[3]) { + this._renderBoundaries[3] = rectY + 2*radius; + } + + } + }, + _colorize: function() { + var x = this._renderBoundaries[0]; + var y = this._renderBoundaries[1]; + var width = this._renderBoundaries[2] - x; + var height = this._renderBoundaries[3] - y; + var maxWidth = this._width; + var maxHeight = this._height; + var opacity = this._opacity; + var maxOpacity = this._maxOpacity; + var minOpacity = this._minOpacity; + var useGradientOpacity = this._useGradientOpacity; + + if (x < 0) { + x = 0; + } + if (y < 0) { + y = 0; + } + if (x + width > maxWidth) { + width = maxWidth - x; + } + if (y + height > maxHeight) { + height = maxHeight - y; + } + + var img = this.shadowCtx.getImageData(x, y, width, height); + var imgData = img.data; + var len = imgData.length; + var palette = this._palette; + + + for (var i = 3; i < len; i+= 4) { + var alpha = imgData[i]; + var offset = alpha * 4; + + + if (!offset) { + continue; + } + + var finalAlpha; + if (opacity > 0) { + finalAlpha = opacity; + } else { + if (alpha < maxOpacity) { + if (alpha < minOpacity) { + finalAlpha = minOpacity; + } else { + finalAlpha = alpha; + } + } else { + finalAlpha = maxOpacity; + } + } + + imgData[i-3] = palette[offset]; + imgData[i-2] = palette[offset + 1]; + imgData[i-1] = palette[offset + 2]; + imgData[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha; + + } + + img.data = imgData; + this.ctx.putImageData(img, x, y); + + this._renderBoundaries = [1000, 1000, 0, 0]; + + }, + getValueAt: function(point) { + var value; + var shadowCtx = this.shadowCtx; + var img = shadowCtx.getImageData(point.x, point.y, 1, 1); + var data = img.data[3]; + var max = this._max; + var min = this._min; + + value = (Math.abs(max-min) * (data/255)) >> 0; + + return value; + }, + getDataURL: function() { + return this.canvas.toDataURL(); + } + }; + + + return Canvas2dRenderer; +})(); diff --git a/static/js/libs/heatmap.js-2.0.5/src/renderer/vml.js b/static/js/libs/heatmap.js-2.0.5/src/renderer/vml.js new file mode 100644 index 00000000..03ad760c --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/renderer/vml.js @@ -0,0 +1 @@ +// TO BE IMPLEMENTED \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/src/util.js b/static/js/libs/heatmap.js-2.0.5/src/util.js new file mode 100644 index 00000000..f5d976b4 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/src/util.js @@ -0,0 +1,15 @@ + + +var Util = { + merge: function() { + var merged = {}; + var argsLen = arguments.length; + for (var i = 0; i < argsLen; i++) { + var obj = arguments[i] + for (var key in obj) { + merged[key] = obj[key]; + } + } + return merged; + } +}; \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/minimum-initialization/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/minimum-initialization/index.html new file mode 100644 index 00000000..1305d3d2 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/minimum-initialization/index.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Minimum Initialization</title> + <style> + body, html { margin:0; padding:0; } + #heatmapContainerWrapper { width:800px; height:500px; margin:auto; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + </style> + <script src="/build/heatmap.js"></script> + </head> + <body> + <h1>Minimum Initialization</h1> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <script> + + window.onload = function() { + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer') + }); + window.h = heatmap; + + h.addData({x: 100, y: 100, value: 1 }); + h.addData({x: 100, y: 100, value: 3 }); + h.addData({x: 20, y: 100, value: 3 }); + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/multiply-alpha/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/multiply-alpha/index.html new file mode 100644 index 00000000..9b3d7b7b --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/multiply-alpha/index.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Multiply Alpha</title> + <style> + body, html { margin:0; padding:0; } + #heatmapContainerWrapper { width:800px; height:500px; margin:auto; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + </style> + <script src="/build/heatmap.js"></script> + </head> + <body> + <h1>Multiply Alpha</h1> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <script> + + window.onload = function() { + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer') + }); + window.h = heatmap; + + h.setData({ max: 10, data: [{ x: 40, y: 40, value: 5 }, { x: 80, y: 40, value: 5 }] }) + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-heatmap.js b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-heatmap.js new file mode 100644 index 00000000..9d3e4983 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-heatmap.js @@ -0,0 +1,279 @@ +/* +* heatmap.js gmaps overlay +* +* Copyright (c) 2014, Patrick Wied (http://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +;(function (name, context, factory) { + var gmaps, h337; + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + h337 = require('heatmap.js'); + gmaps = require('google-maps'); + module.exports = factory(h337, gmaps); + } else if (typeof define === "function" && define.amd) { + define(['heatmap.js', 'google-maps'], factory); + } else { + // browser globals + if (typeof window.h337 === 'undefined') { + throw new Error('heatmap.js must be loaded before the gmaps heatmap plugin'); + } + if (typeof window.google === 'undefined') { + throw new Error('Google Maps must be loaded before the gmaps heatmap plugin'); + } + context[name] = factory(window.h337, window.google.maps); + } + +})("HeatmapOverlay", this, function(h337, gmaps) { + 'use strict'; + + var HeatmapOverlay = function(map, cfg){ + this.setMap(map); + this.initialize(cfg || {}); + }; + + HeatmapOverlay.prototype = new gmaps.OverlayView(); + + + HeatmapOverlay.CSS_TRANSFORM = (function() { + var div = document.createElement('div'); + var props = [ + 'transform', + 'WebkitTransform', + 'MozTransform', + 'OTransform', + 'msTransform' + ]; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (div.style[prop] !== undefined) { + return prop; + } + } + + return props[0]; + })(); + + HeatmapOverlay.prototype.initialize = function(cfg) { + this.cfg = cfg; + + var map = this.map = this.getMap(); + var container = this.container = document.createElement('div'); + var mapDiv = map.getDiv(); + var width = this.width = mapDiv.clientWidth; + var height = this.height = mapDiv.clientHeight; + + container.style.cssText = 'width:' + width +'px;height:' + height+'px;'; + + this.data = []; + this.max = 1; + this.min = 0; + + cfg.container = container; + }; + + HeatmapOverlay.prototype.onAdd = function(){ + var that = this; + + this.getPanes().overlayLayer.appendChild(this.container); + + + this.changeHandler = google.maps.event.addListener( + this.map, + 'bounds_changed', + function() { return that.draw(); } + ); + + if (!this.heatmap) { + this.heatmap = h337.create(this.cfg); + } + this.draw(); + }; + + HeatmapOverlay.prototype.onRemove = function() { + if (!this.map) { return; } + + this.map = null; + + this.container.parentElement.removeChild(this.container); + + if (this.changeHandler) { + google.maps.event.removeListener(this.changeHandler); + this.changeHandler = null; + } + + }; + + HeatmapOverlay.prototype.draw = function() { + if (!this.map) { return; } + + var bounds = this.map.getBounds(); + + var topLeft = new google.maps.LatLng( + bounds.getNorthEast().lat(), + bounds.getSouthWest().lng() + ); + + var projection = this.getProjection(); + var point = projection.fromLatLngToDivPixel(topLeft); + + this.container.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' + + Math.round(point.x) + 'px,' + + Math.round(point.y) + 'px)'; + + this.update(); + }; + + HeatmapOverlay.prototype.resize = function() { + + if (!this.map){ return; } + + var div = this.map.getDiv(), + width = div.clientWidth, + height = div.clientHeight; + + if (width == this.width && height == this.height){ return; } + + this.width = width; + this.height = height; + + // update heatmap dimensions + this.heatmap._renderer.setDimensions(width, height); + // then redraw all datapoints with update + this.update(); + }; + + HeatmapOverlay.prototype.update = function() { + var projection = this.getProjection(), + zoom, scale, bounds, topLeft; + var generatedData = { max: this.max, min: this.min, data: [] }; + + if (!projection){ return; } + + bounds = this.map.getBounds(); + + topLeft = new google.maps.LatLng( + bounds.getNorthEast().lat(), + bounds.getSouthWest().lng() + ); + + zoom = this.map.getZoom(); + scale = Math.pow(2, zoom); + + this.resize(); + + if (this.data.length == 0) { + if (this.heatmap) { + this.heatmap.setData(generatedData); + } + return; + } + + + var latLngPoints = []; + // iterate through data + var len = this.data.length; + var layerProjection = this.getProjection(); + var layerOffset = layerProjection.fromLatLngToDivPixel(topLeft); + var radiusMultiplier = this.cfg.scaleRadius ? scale : 1; + var localMax = 0; + var localMin = 0; + var valueField = this.cfg.valueField; + + + while (len--) { + var entry = this.data[len]; + var value = entry[valueField]; + var latlng = entry.latlng; + + + // we don't wanna render points that are not even on the map ;-) + if (!bounds.contains(latlng)) { + continue; + } + // local max is the maximum within current bounds + localMax = Math.max(value, localMax); + localMin = Math.min(value, localMin); + + var point = layerProjection.fromLatLngToDivPixel(latlng); + var latlngPoint = { x: Math.round(point.x - layerOffset.x), y: Math.round(point.y - layerOffset.y) }; + latlngPoint[valueField] = value; + + var radius; + + if (entry.radius) { + radius = entry.radius * radiusMultiplier; + } else { + radius = (this.cfg.radius || 2) * radiusMultiplier; + } + latlngPoint.radius = radius; + latLngPoints.push(latlngPoint); + } + if (this.cfg.useLocalExtrema) { + generatedData.max = localMax; + generatedData.min = localMin; + } + + generatedData.data = latLngPoints; + + this.heatmap.setData(generatedData); + + }; + + HeatmapOverlay.prototype.setData = function(data) { + this.max = data.max; + this.min = data.min; + + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + + // transform data to latlngs + var data = data.data; + var len = data.length; + var d = []; + + while (len--) { + var entry = data[len]; + var latlng = new google.maps.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + d.push(dataObj); + } + this.data = d; + this.update(); + }; + // experimential. not ready yet. + HeatmapOverlay.prototype.addData = function(pointOrArray) { + if (pointOrArray.length > 0) { + var len = pointOrArray.length; + while(len--) { + this.addData(pointOrArray[len]); + } + } else { + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + var entry = pointOrArray; + var latlng = new google.maps.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + this.max = Math.max(this.max, dataObj[valueField]); + this.min = Math.min(this.min, dataObj[valueField]); + this.data.push(dataObj); + this.update(); + } + }; + + return HeatmapOverlay; + +}); diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-node.js b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-node.js new file mode 100644 index 00000000..d50c139b --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-node.js @@ -0,0 +1,3 @@ +var gmapsPlugin = require('../../../plugins/gmaps-heatmap'); + +console.log(gmapsPlugin); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs-main.js b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs-main.js new file mode 100644 index 00000000..094635d9 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs-main.js @@ -0,0 +1,8 @@ +require.config({ + packages: { + "heatmap.js": "../../../build/heatmap" + } +}); +requirejs(["gmaps-heatmap"], function(gmapsHeatmap) { + console.log('jooo'); +}); \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs.html new file mode 100644 index 00000000..b6534ce2 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-requirejs.html @@ -0,0 +1,8 @@ +<html> + <head> + <title>Module Loading Test: RequireJS</title> + </head> + <body> + <script data-main="gmaps-requirejs-main" src="http://requirejs.org/docs/release/2.2.0/minified/require.js"></script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-script.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-script.html new file mode 100644 index 00000000..31bb6a3e --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/gmaps-script.html @@ -0,0 +1,19 @@ +<html> + <head> + <title>Module Loading Test: Script insert</title> + </head> + <body> + <script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_KEY"> </script> + <script src="/build/heatmap.js"></script> + <script src="/plugins/gmaps-heatmap.js"></script> + <script> + window.initMap = function() { + console.log(window.google); + }; + window.onload = function() { + console.log('h337: ', window.h337); + console.log('HeatmapOverlay', window.HeatmapOverlay); + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/plugin-modules/index.html new file mode 100644 index 00000000..e69de29b diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/size/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/size/index.html new file mode 100644 index 00000000..de009dec --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/size/index.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Heatmap Size Configuration Test</title> + <style> + body, html { margin:0; padding:0; } + .heatmap-canvas { position:relative !important; } + #heatmapContainer canvas{ border:5px dashed magenta;} + </style> + <script src="/build/heatmap.js"></script> + </head> + <body> + <h1>Heatmap Size Configuration Test</h1> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <button>Reconfigure</button> + <script> + + window.onload = function() { + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + width: 300, + height: 300, + radius: 100 + }); + window.h = heatmap; + + h.setData({ max: 10, data: [{ x: 40, y: 40, value: 10 }, { x: 80, y: 40, value: 5 }, { x: 80, y: 80, value: 15 }] }) + + document.querySelector('button').onclick = function() { + h.configure({ + width: ((Math.random() * 500) >> 0), + height: ((Math.random() * 500) >> 0) + }); + } + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/small-values/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/small-values/index.html new file mode 100644 index 00000000..a0ad9516 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/small-values/index.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Multiply Alpha</title> + <style> + body, html { margin:0; padding:0; } + #heatmapContainerWrapper { width:1000px; height:1000px; margin:auto; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + </style> + <script src="/build/heatmap.js"></script> + </head> + <body> + <h1>Small Values</h1> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <script> + + window.onload = function() { + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer'), + opacity:1, + gradient: { + '0': 'yellow', + '1': 'red' + } + }); + window.h = heatmap; + + var d = [ + { x: 200, y: 150, value: 1900, radius: 50 }, + { x: 400, y: 150, value: 100, radius: 20 }, + { x: 600, y: 150, value: 10, radius: 10 }, + { x: 800, y: 150, value: 2000, radius: 50 }]; + h.setData({ + min: 1, + max: 1000000, + data: d + }); + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/heatmap.js-2.0.5/tests/visual/upper-bound/index.html b/static/js/libs/heatmap.js-2.0.5/tests/visual/upper-bound/index.html new file mode 100644 index 00000000..43f5c5a5 --- /dev/null +++ b/static/js/libs/heatmap.js-2.0.5/tests/visual/upper-bound/index.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Multiply Alpha</title> + <style> + body, html { margin:0; padding:0; } + #heatmapContainerWrapper { width:800px; height:500px; margin:auto; background:rgba(0,0,0,.1); } + #heatmapContainer { width:100%; height:100%;} + </style> + <script src="/build/heatmap.js"></script> + </head> + <body> + <h1>Multiply Alpha</h1> + <div id="heatmapContainerWrapper"> + <div id="heatmapContainer"> + + </div> + </div> + <script> + + window.onload = function() { + var heatmap = h337.create({ + container: document.getElementById('heatmapContainer') + }); + window.h = heatmap; + + h.setData({ max: 10, data: [{ x: 40, y: 40, value: 10 }, { x: 80, y: 40, value: 5 }, { x: 80, y: 80, value: 15 }] }) + + }; + </script> + </body> +</html> \ No newline at end of file diff --git a/static/js/libs/leaflet-heatmap.js b/static/js/libs/leaflet-heatmap.js new file mode 100644 index 00000000..5f93f0b6 --- /dev/null +++ b/static/js/libs/leaflet-heatmap.js @@ -0,0 +1,246 @@ +/* +* Leaflet Heatmap Overlay +* +* Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at) +* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) +* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license. +*/ +;(function (name, context, factory) { + // Supports UMD. AMD, CommonJS/Node.js and browser context + if (typeof module !== "undefined" && module.exports) { + module.exports = factory( + require('heatmap.js'), + require('leaflet') + ); + } else if (typeof define === "function" && define.amd) { + define(['heatmap.js', 'leaflet'], factory); + } else { + // browser globals + if (typeof window.h337 === 'undefined') { + throw new Error('heatmap.js must be loaded before the leaflet heatmap plugin'); + } + if (typeof window.L === 'undefined') { + throw new Error('Leaflet must be loaded before the leaflet heatmap plugin'); + } + context[name] = factory(window.h337, window.L); + } + +})("HeatmapOverlay", this, function (h337, L) { + 'use strict'; + + // Leaflet < 0.8 compatibility + if (typeof L.Layer === 'undefined') { + L.Layer = L.Class; + } + + var HeatmapOverlay = L.Layer.extend({ + + initialize: function (config) { + this.cfg = config; + this._el = L.DomUtil.create('div', 'leaflet-zoom-hide'); + this._data = []; + this._max = 1; + this._min = 0; + this.cfg.container = this._el; + }, + + onAdd: function (map) { + var size = map.getSize(); + + this._map = map; + + this._width = size.x; + this._height = size.y; + + this._el.style.width = size.x + 'px'; + this._el.style.height = size.y + 'px'; + this._el.style.position = 'absolute'; + + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + map.getPanes().overlayPane.appendChild(this._el); + + if (!this._heatmap) { + this._heatmap = h337.create(this.cfg); + } + + // this resets the origin and redraws whenever + // the zoom changed or the map has been moved + map.on('moveend', this._reset, this); + this._draw(); + }, + + addTo: function (map) { + map.addLayer(this); + return this; + }, + + onRemove: function (map) { + // remove layer's DOM elements and listeners + map.getPanes().overlayPane.removeChild(this._el); + + map.off('moveend', this._reset, this); + }, + _draw: function() { + if (!this._map) { return; } + + var mapPane = this._map.getPanes().mapPane; + var point = mapPane._leaflet_pos; + + // reposition the layer + this._el.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' + + -Math.round(point.x) + 'px,' + + -Math.round(point.y) + 'px)'; + + this._update(); + }, + _update: function() { + var bounds, zoom, scale; + var generatedData = { max: this._max, min: this._min, data: [] }; + + bounds = this._map.getBounds(); + zoom = this._map.getZoom(); + scale = Math.pow(2, zoom); + + if (this._data.length == 0) { + if (this._heatmap) { + this._heatmap.setData(generatedData); + } + return; + } + + + var latLngPoints = []; + var radiusMultiplier = this.cfg.scaleRadius ? scale : 1; + var localMax = 0; + var localMin = 0; + var valueField = this.cfg.valueField; + var len = this._data.length; + + while (len--) { + var entry = this._data[len]; + var value = entry[valueField]; + var latlng = entry.latlng; + + + // we don't wanna render points that are not even on the map ;-) + if (!bounds.contains(latlng)) { + continue; + } + // local max is the maximum within current bounds + localMax = Math.max(value, localMax); + localMin = Math.min(value, localMin); + + var point = this._map.latLngToContainerPoint(latlng); + var latlngPoint = { x: Math.round(point.x), y: Math.round(point.y) }; + latlngPoint[valueField] = value; + + var radius; + + if (entry.radius) { + radius = entry.radius * radiusMultiplier; + } else { + radius = (this.cfg.radius || 2) * radiusMultiplier; + } + latlngPoint.radius = radius; + latLngPoints.push(latlngPoint); + } + if (this.cfg.useLocalExtrema) { + generatedData.max = localMax; + generatedData.min = localMin; + } + + generatedData.data = latLngPoints; + + this._heatmap.setData(generatedData); + }, + setData: function(data) { + this._max = data.max || this._max; + this._min = data.min || this._min; + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + + // transform data to latlngs + var data = data.data; + var len = data.length; + var d = []; + + while (len--) { + var entry = data[len]; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + dataObj[valueField] = entry[valueField]; + if (entry.radius) { + dataObj.radius = entry.radius; + } + d.push(dataObj); + } + this._data = d; + + this._draw(); + }, + // experimential... not ready. + addData: function(pointOrArray) { + if (pointOrArray.length > 0) { + var len = pointOrArray.length; + while(len--) { + this.addData(pointOrArray[len]); + } + } else { + var latField = this.cfg.latField || 'lat'; + var lngField = this.cfg.lngField || 'lng'; + var valueField = this.cfg.valueField || 'value'; + var entry = pointOrArray; + var latlng = new L.LatLng(entry[latField], entry[lngField]); + var dataObj = { latlng: latlng }; + + dataObj[valueField] = entry[valueField]; + this._max = Math.max(this._max, dataObj[valueField]); + this._min = Math.min(this._min, dataObj[valueField]); + + if (entry.radius) { + dataObj.radius = entry.radius; + } + this._data.push(dataObj); + this._draw(); + } + }, + _reset: function () { + this._origin = this._map.layerPointToLatLng(new L.Point(0, 0)); + + var size = this._map.getSize(); + if (this._width !== size.x || this._height !== size.y) { + this._width = size.x; + this._height = size.y; + + this._el.style.width = this._width + 'px'; + this._el.style.height = this._height + 'px'; + + this._heatmap._renderer.setDimensions(this._width, this._height); + } + this._draw(); + } + }); + + HeatmapOverlay.CSS_TRANSFORM = (function() { + var div = document.createElement('div'); + var props = [ + 'transform', + 'WebkitTransform', + 'MozTransform', + 'OTransform', + 'msTransform' + ]; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + if (div.style[prop] !== undefined) { + return prop; + } + } + return props[0]; + })(); + + return HeatmapOverlay; +}); \ No newline at end of file diff --git a/static/js/libs/leaflet/images/layers-2x.png b/static/js/libs/leaflet/images/layers-2x.png new file mode 100644 index 00000000..a2cf7f9e Binary files /dev/null and b/static/js/libs/leaflet/images/layers-2x.png differ diff --git a/static/js/libs/leaflet/images/layers.png b/static/js/libs/leaflet/images/layers.png new file mode 100644 index 00000000..bca0a0e4 Binary files /dev/null and b/static/js/libs/leaflet/images/layers.png differ diff --git a/static/js/libs/leaflet/images/marker-icon-2x.png b/static/js/libs/leaflet/images/marker-icon-2x.png new file mode 100644 index 00000000..0015b649 Binary files /dev/null and b/static/js/libs/leaflet/images/marker-icon-2x.png differ diff --git a/static/js/libs/leaflet/images/marker-icon.png b/static/js/libs/leaflet/images/marker-icon.png new file mode 100644 index 00000000..e2e9f757 Binary files /dev/null and b/static/js/libs/leaflet/images/marker-icon.png differ diff --git a/static/js/libs/leaflet/images/marker-shadow.png b/static/js/libs/leaflet/images/marker-shadow.png new file mode 100644 index 00000000..d1e773c7 Binary files /dev/null and b/static/js/libs/leaflet/images/marker-shadow.png differ diff --git a/static/js/libs/leaflet/leaflet.css b/static/js/libs/leaflet/leaflet.css new file mode 100644 index 00000000..2f08826b --- /dev/null +++ b/static/js/libs/leaflet/leaflet.css @@ -0,0 +1,509 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-map-pane svg, +.leaflet-map-pane canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + -ms-touch-action: none; + touch-action: none; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer { + max-width: none !important; + } +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; + } +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + } + + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-container a.leaflet-active { + outline: 2px solid orange; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } + + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } +.leaflet-control-zoom-out { + font-size: 20px; + } + +.leaflet-touch .leaflet-control-zoom-in { + font-size: 22px; + } +.leaflet-touch .leaflet-control-zoom-out { + font-size: 24px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover { + text-decoration: underline; + } +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: border-box; + box-sizing: border-box; + + background: #fff; + background: rgba(255, 255, 255, 0.5); + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; + } +.leaflet-popup-content p { + margin: 18px 0; + } +.leaflet-popup-tip-container { + margin: 0 auto; + width: 40px; + height: 20px; + position: relative; + overflow: hidden; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + border: none; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; + } +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } diff --git a/static/js/libs/leaflet/leaflet.js b/static/js/libs/leaflet/leaflet.js new file mode 100644 index 00000000..fee2cdb0 --- /dev/null +++ b/static/js/libs/leaflet/leaflet.js @@ -0,0 +1,9 @@ +/* + Leaflet 1.0.0-beta.2 (954e83d), a JS library for interactive maps. http://leafletjs.com + (c) 2010-2015 Vladimir Agafonkin, (c) 2010-2011 CloudMade +*/ +!function(t,e,i){function n(){var e=t.L;o.noConflict=function(){return t.L=e,this},t.L=o}var o={version:"1.0.0-beta.2"};"object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),"undefined"!=typeof t&&n(),o.Util={extend:function(t){var e,i,n,o;for(i=1,n=arguments.length;n>i;i++){o=arguments[i];for(e in o)t[e]=o[e]}return t},create:Object.create||function(){function t(){}return function(e){return t.prototype=e,new t}}(),bind:function(t,e){var i=Array.prototype.slice;if(t.bind)return t.bind.apply(t,i.call(arguments,1));var n=i.call(arguments,2);return function(){return t.apply(e,n.length?n.concat(i.call(arguments)):arguments)}},stamp:function(t){return t._leaflet_id=t._leaflet_id||++o.Util.lastId,t._leaflet_id},lastId:0,throttle:function(t,e,i){var n,o,s,r;return r=function(){n=!1,o&&(s.apply(i,o),o=!1)},s=function(){n?o=arguments:(t.apply(i,arguments),setTimeout(r,e),n=!0)}},wrapNum:function(t,e,i){var n=e[1],o=e[0],s=n-o;return t===n&&i?t:((t-o)%s+s)%s+o},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){t.hasOwnProperty("options")||(t.options=t.options?o.Util.create(t.options):{});for(var i in e)t.options[i]=e[i];return t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(o.Util.templateRe,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},templateRe:/\{ *([\w_]+) *\}/g,isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},indexOf:function(t,e){for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){return t["webkit"+e]||t["moz"+e]||t["ms"+e]}function i(e){var i=+new Date,o=Math.max(0,16-(i-n));return n=i+o,t.setTimeout(e,o)}var n=0,s=t.requestAnimationFrame||e("RequestAnimationFrame")||i,r=t.cancelAnimationFrame||e("CancelAnimationFrame")||e("CancelRequestAnimationFrame")||function(e){t.clearTimeout(e)};o.Util.requestAnimFrame=function(e,n,r){return r&&s===i?void e.call(n):s.call(t,o.bind(e,n))},o.Util.cancelAnimFrame=function(e){e&&r.call(t,e)}}(),o.extend=o.Util.extend,o.bind=o.Util.bind,o.stamp=o.Util.stamp,o.setOptions=o.Util.setOptions,o.Class=function(){},o.Class.extend=function(t){var e=function(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},i=e.__super__=this.prototype,n=o.Util.create(i);n.constructor=e,e.prototype=n;for(var s in this)this.hasOwnProperty(s)&&"prototype"!==s&&(e[s]=this[s]);return t.statics&&(o.extend(e,t.statics),delete t.statics),t.includes&&(o.Util.extend.apply(null,[n].concat(t.includes)),delete t.includes),n.options&&(t.options=o.Util.extend(o.Util.create(n.options),t.options)),o.extend(n,t),n._initHooks=[],n.callInitHooks=function(){if(!this._initHooksCalled){i.callInitHooks&&i.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=n._initHooks.length;e>t;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)},o.Evented=o.Class.extend({on:function(t,e,i){if("object"==typeof t)for(var n in t)this._on(n,t[n],e);else{t=o.Util.splitWords(t);for(var s=0,r=t.length;r>s;s++)this._on(t[s],e,i)}return this},off:function(t,e,i){if(t)if("object"==typeof t)for(var n in t)this._off(n,t[n],e);else{t=o.Util.splitWords(t);for(var s=0,r=t.length;r>s;s++)this._off(t[s],e,i)}else delete this._events;return this},_on:function(t,e,i){var n=this._events=this._events||{},s=i&&i!==this&&o.stamp(i);if(s){var r=t+"_idx",a=t+"_len",h=n[r]=n[r]||{},l=o.stamp(e)+"_"+s;h[l]||(h[l]={fn:e,ctx:i},n[a]=(n[a]||0)+1)}else n[t]=n[t]||[],n[t].push({fn:e})},_off:function(t,e,i){var n=this._events,s=t+"_idx",r=t+"_len";if(n){if(!e)return delete n[t],delete n[s],void delete n[r];var a,h,l,u,c,d=i&&i!==this&&o.stamp(i);if(d)c=o.stamp(e)+"_"+d,a=n[s],a&&a[c]&&(u=a[c],delete a[c],n[r]--);else if(a=n[t])for(h=0,l=a.length;l>h;h++)if(a[h].fn===e){u=a[h],a.splice(h,1);break}u&&(u.fn=o.Util.falseFn)}},fire:function(t,e,i){if(!this.listens(t,i))return this;var n=o.Util.extend({},e,{type:t,target:this}),s=this._events;if(s){var r,a,h,l,u=s[t+"_idx"];if(s[t])for(h=s[t].slice(),r=0,a=h.length;a>r;r++)h[r].fn.call(this,n);for(l in u)u[l].fn.call(u[l].ctx,n)}return i&&this._propagateEvent(n),this},listens:function(t,e){var i=this._events;if(i&&(i[t]||i[t+"_len"]))return!0;if(e)for(var n in this._eventParents)if(this._eventParents[n].listens(t,e))return!0;return!1},once:function(t,e,i){if("object"==typeof t){for(var n in t)this.once(n,t[n],e);return this}var s=o.bind(function(){this.off(t,e,i).off(t,s,i)},this);return this.on(t,e,i).on(t,s,i)},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[o.stamp(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[o.stamp(t)],this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParents[e].fire(t.type,o.extend({layer:t.target},t),!0)}});var s=o.Evented.prototype;s.addEventListener=s.on,s.removeEventListener=s.clearAllEventListeners=s.off,s.addOneTimeEventListener=s.once,s.fireEvent=s.fire,s.hasEventListeners=s.listens,o.Mixin={Events:s},function(){var i=navigator.userAgent.toLowerCase(),n=e.documentElement,s="ActiveXObject"in t,r=-1!==i.indexOf("webkit"),a=-1!==i.indexOf("phantom"),h=-1!==i.search("android [23]"),l=-1!==i.indexOf("chrome"),u=-1!==i.indexOf("gecko")&&!r&&!t.opera&&!s,c="undefined"!=typeof orientation||-1!==i.indexOf("mobile"),d=!t.PointerEvent&&t.MSPointerEvent,_=t.PointerEvent&&navigator.pointerEnabled||d,m=s&&"transition"in n.style,p="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!h,f="MozPerspective"in n.style,g="OTransition"in n.style,v=!t.L_NO_TOUCH&&!a&&(_||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:s,ielt9:s&&!e.addEventListener,webkit:r,gecko:u,android:-1!==i.indexOf("android"),android23:h,chrome:l,safari:!l&&-1!==i.indexOf("safari"),ie3d:m,webkit3d:p,gecko3d:f,opera12:g,any3d:!t.L_DISABLE_3D&&(m||p||f)&&!g&&!a,mobile:c,mobileWebkit:c&&r,mobileWebkit3d:c&&p,mobileOpera:c&&t.opera,mobileGecko:c&&u,touch:!!v,msPointer:!!d,pointer:!!_,retina:(t.devicePixelRatio||t.screen.deviceXDPI/t.screen.logicalXDPI)>1}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new o.Point(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new o.Point(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,r=s.x>=e.x&&n.x<=i.x,a=s.y>=e.y&&n.y<=i.y;return r&&a},overlaps:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,r=s.x>e.x&&n.x<i.x,a=s.y>e.y&&n.y<i.y;return r&&a},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},remove:function(t){var e=t.parentNode;e&&e.removeChild(t)},empty:function(t){for(;t.firstChild;)t.removeChild(t.firstChild)},toFront:function(t){t.parentNode.appendChild(t)},toBack:function(t){var e=t.parentNode;e.insertBefore(t,e.firstChild)},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil.getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,r=n.length;r>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var a=o.DomUtil.getClass(t);o.DomUtil.setClass(t,(a?a+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil.setClass(t,o.Util.trim((" "+o.DomUtil.getClass(t)+" ").replace(" "+e+" "," ")))},setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){"opacity"in t.style?t.style.opacity=e:"filter"in t.style&&o.DomUtil._setOpacityIE(t,e)},_setOpacityIE:function(t,e){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"},testProp:function(t){for(var i=e.documentElement.style,n=0;n<t.length;n++)if(t[n]in i)return t[n];return!1},setTransform:function(t,e,i){var n=e||new o.Point(0,0);t.style[o.DomUtil.TRANSFORM]=(o.Browser.ie3d?"translate("+n.x+"px,"+n.y+"px)":"translate3d("+n.x+"px,"+n.y+"px,0)")+(i?" scale("+i+")":"")},setPosition:function(t,e){t._leaflet_pos=e,o.Browser.any3d?o.DomUtil.setTransform(t,e):(t.style.left=e.x+"px",t.style.top=e.y+"px")},getPosition:function(t){return t._leaflet_pos}},function(){o.DomUtil.TRANSFORM=o.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]);var i=o.DomUtil.TRANSITION=o.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]);if(o.DomUtil.TRANSITION_END="webkitTransition"===i||"OTransition"===i?i+"End":"transitionend","onselectstart"in e)o.DomUtil.disableTextSelection=function(){o.DomEvent.on(t,"selectstart",o.DomEvent.preventDefault)},o.DomUtil.enableTextSelection=function(){o.DomEvent.off(t,"selectstart",o.DomEvent.preventDefault)};else{var n=o.DomUtil.testProp(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);o.DomUtil.disableTextSelection=function(){if(n){var t=e.documentElement.style;this._userSelect=t[n],t[n]="none"}},o.DomUtil.enableTextSelection=function(){n&&(e.documentElement.style[n]=this._userSelect,delete this._userSelect)}}o.DomUtil.disableImageDrag=function(){o.DomEvent.on(t,"dragstart",o.DomEvent.preventDefault)},o.DomUtil.enableImageDrag=function(){o.DomEvent.off(t,"dragstart",o.DomEvent.preventDefault)},o.DomUtil.preventOutline=function(e){for(;-1===e.tabIndex;)e=e.parentNode;e&&e.style&&(o.DomUtil.restoreOutline(),this._outlineElement=e,this._outlineStyle=e.style.outline,e.style.outline="none",o.DomEvent.on(t,"keydown",o.DomUtil.restoreOutline,this))},o.DomUtil.restoreOutline=function(){this._outlineElement&&(this._outlineElement.style.outline=this._outlineStyle,delete this._outlineElement,delete this._outlineStyle,o.DomEvent.off(t,"keydown",o.DomUtil.restoreOutline,this))}}(),o.LatLng=function(t,e,n){if(isNaN(t)||isNaN(e))throw new Error("Invalid LatLng object: ("+t+", "+e+")");this.lat=+t,this.lng=+e,n!==i&&(this.alt=+n)},o.LatLng.prototype={equals:function(t,e){if(!t)return!1;t=o.latLng(t);var n=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return(e===i?1e-9:e)>=n},toString:function(t){return"LatLng("+o.Util.formatNum(this.lat,t)+", "+o.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){return o.CRS.Earth.distance(this,o.latLng(t))},wrap:function(){return o.CRS.Earth.wrapLatLng(this)},toBounds:function(t){var e=180*t/40075017,i=e/Math.cos(Math.PI/180*this.lat);return o.latLngBounds([this.lat-e,this.lng-i],[this.lat+e,this.lng+i])},clone:function(){return new o.LatLng(this.lat,this.lng,this.alt)}},o.latLng=function(t,e,n){return t instanceof o.LatLng?t:o.Util.isArray(t)&&"object"!=typeof t[0]?3===t.length?new o.LatLng(t[0],t[1],t[2]):2===t.length?new o.LatLng(t[0],t[1]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon,t.alt):e===i?null:new o.LatLng(t,e,n)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){var e,i,n=this._southWest,s=this._northEast;if(t instanceof o.LatLng)e=t,i=t;else{if(!(t instanceof o.LatLngBounds))return t?this.extend(o.latLng(t)||o.latLngBounds(t)):this;if(e=t._southWest,i=t._northEast,!e||!i)return this}return n||s?(n.lat=Math.min(e.lat,n.lat),n.lng=Math.min(e.lng,n.lng),s.lat=Math.max(i.lat,s.lat),s.lng=Math.max(i.lng,s.lng)):(this._southWest=new o.LatLng(e.lat,e.lng),this._northEast=new o.LatLng(i.lat,i.lng)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),r=s.lat>=e.lat&&n.lat<=i.lat,a=s.lng>=e.lng&&n.lng<=i.lng;return r&&a},overlaps:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),r=s.lat>e.lat&&n.lat<i.lat,a=s.lng>e.lng&&n.lng<i.lng;return r&&a},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)},bounds:o.bounds([-180,-90],[180,90])},o.Projection.SphericalMercator={R:6378137,MAX_LATITUDE:85.0511287798,project:function(t){var e=Math.PI/180,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=Math.sin(n*e);return new o.Point(this.R*t.lng*e,this.R*Math.log((1+s)/(1-s))/2)},unproject:function(t){var e=180/Math.PI;return new o.LatLng((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*e,t.x*e/this.R)},bounds:function(){var t=6378137*Math.PI;return o.bounds([-t,-t],[t,t])}()},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return null;var e=this.projection.bounds,i=this.scale(t),n=this.transformation.transform(e.min,i),s=this.transformation.transform(e.max,i);return o.bounds(n,s)},wrapLatLng:function(t){var e=this.wrapLng?o.Util.wrapNum(t.lng,this.wrapLng,!0):t.lng,i=this.wrapLat?o.Util.wrapNum(t.lat,this.wrapLat,!0):t.lat,n=t.alt;return o.latLng(i,e,n)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0}),o.CRS.Earth=o.extend({},o.CRS,{wrapLng:[-180,180],R:6378137,distance:function(t,e){var i=Math.PI/180,n=t.lat*i,o=e.lat*i,s=Math.sin(n)*Math.sin(o)+Math.cos(n)*Math.cos(o)*Math.cos((e.lng-t.lng)*i);return this.R*Math.acos(Math.min(s,1))}}),o.CRS.EPSG3857=o.extend({},o.CRS.Earth,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:function(){var t=.5/(Math.PI*o.Projection.SphericalMercator.R);return new o.Transformation(t,.5,-t,.5)}()}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS.Earth,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/180,1,-1/180,.5)}),o.Map=o.Evented.extend({options:{crs:o.CRS.EPSG3857,fadeAnimation:!0,trackResize:!0,markerZoomAnimation:!0,maxBoundsViscosity:0,transform3DLimit:8388608},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.zoom!==i&&(this._zoom=this._limitZoom(e.zoom)),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this.callInitHooks(),this._addLayers(this.options.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),e),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=t,this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),r=t instanceof o.Point?t:this.latLngToContainerPoint(t),a=r.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(a));return this.setView(h,e,{zoom:i})},_getBoundsCenterZoom:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var r=n.subtract(i).divideBy(2),a=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(a.add(h).divideBy(2).add(r),s);return{center:l,zoom:s}},fitBounds:function(t,e){var i=this._getBoundsCenterZoom(t,e);return this.setView(i.center,i.zoom,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return(t=o.latLngBounds(t))?(this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):this.off("moveend",this._panInsideMaxBounds)},setMinZoom:function(t){return this.options.minZoom=t,this._loaded&&this.getZoom()<this.options.minZoom?this.setZoom(t):this},setMaxZoom:function(t){return this.options.maxZoom=t,this._loaded&&this.getZoom()>this.options.maxZoom?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,o.latLngBounds(t));return i.equals(n)?this:(this.panTo(n,e),this._enforcingBounds=!1,this)},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),r=n.subtract(s);return r.x||r.y?(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return o.Util.cancelAnimFrame(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._initEvents(!0);try{delete this._container._leaflet}catch(t){this._container._leaflet=i}o.DomUtil.remove(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");for(var e in this._layers)this._layers[e].remove();return this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=o.DomUtil.create("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),r=this.getMaxZoom(),a=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i).floor(),u=e?n.x<a.x||n.y<a.y:a.contains(n);while(u&&r>=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new o.Bounds(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===i?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var n=this.options.crs;return e=e===i?this._zoom:e,n.scale(t)/n.scale(e)},getScaleZoom:function(t,e){var n=this.options.crs;return e=e===i?this._zoom:e,n.zoom(t*n.scale(e))},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(o.latLng(t))},distance:function(t,e){return this.options.crs.distance(o.latLng(t),o.latLng(e))},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");o.DomEvent.addListener(e,"scroll",this._onScroll,this),e._leaflet=!0},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&o.Browser.any3d,o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(o.Browser.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,"leaflet-zoom-hide"),o.DomUtil.addClass(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e){o.DomUtil.setPosition(this._mapPane,new o.Point(0,0));var i=!this._loaded;this._loaded=!0,e=this._limitZoom(e);var n=this._zoom!==e;this._moveStart(n)._move(t,e)._moveEnd(n),this.fire("viewreset"),i&&this.fire("load")},_moveStart:function(t){return t&&this.fire("zoomstart"),this.fire("movestart")},_move:function(t,e,n){e===i&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),o&&this.fire("zoom",n),this.fire("move",n)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){this._targets={},this._targets[o.stamp(this._container)]=this;var i=e?"off":"on";o.DomEvent[i](this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&o.DomEvent[i](t,"resize",this._onResize,this),o.Browser.any3d&&this.options.transform3DLimit&&this[i]("moveend",this._onMoveEnd)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],s="mouseout"===e||"mouseover"===e,r=t.target||t.srcElement;r;){if(i=this._targets[o.stamp(r)],i&&i.listens(e,!0)){if(s&&!o.DomEvent._isExternalTarget(r,t))break;if(n.push(i),s)break}if(r===this._container)break;r=r.parentNode}return n.length||s||!o.DomEvent._isExternalTarget(r,t)||(n=[this]),n},_handleDOMEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e="keypress"===t.type&&13===t.keyCode?"click":t.type;if("click"===t.type){var i=o.Util.extend({},t);i.type="preclick",this._handleDOMEvent(i)}"mousedown"===e&&o.DomUtil.preventOutline(t.target||t.srcElement),this._fireDOMEvent(t,e)}},_fireDOMEvent:function(t,e,i){if(!t._stopped&&(i=(i||[]).concat(this._findEventTargets(t,e)),i.length)){var n=i[0];if("contextmenu"===e&&n.listens(e,!0)&&o.DomEvent.preventDefault(t),"click"!==t.type&&"preclick"!==t.type||t._simulated||!this._draggableMoved(n)){var s={originalEvent:t};if("keypress"!==t.type){var r=n instanceof o.Marker;s.containerPoint=r?this.latLngToContainerPoint(n.getLatLng()):this.mouseEventToContainerPoint(t),s.layerPoint=this.containerPointToLayerPoint(s.containerPoint),s.latlng=r?n.getLatLng():this.layerPointToLatLng(s.layerPoint)}for(var a=0;a<i.length;a++)if(i[a].fire(e,s,!0),s.originalEvent._stopped||i[a].options.nonBubblingEvents&&-1!==o.Util.indexOf(i[a].options.nonBubblingEvents,e))return}}},_draggableMoved:function(t){return t=t.options.draggable?t:this,t.dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,{target:this}):this.on("load",t,e),this},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)||new o.Point(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,e){var n=t&&e!==i?this._getNewPixelOrigin(t,e):this.getPixelOrigin();return n.subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewPixelOrigin(i,e); +return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),r=new o.Bounds(n.subtract(s),n.add(s)),a=this._getBoundsOffset(r,i,e);return this.unproject(n.add(a),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),r=this._rebound(n.x,-s.x),a=this._rebound(n.y,-s.y);return new o.Point(r,a)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return o.Browser.any3d||(t=Math.round(t)),Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Layer=o.Evented.extend({options:{pane:"overlayPane",nonBubblingEvents:[]},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[o.stamp(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[o.stamp(t)],this},_layerAdd:function(t){var e=t.target;e.hasLayer(this)&&(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents&&e.on(this.getEvents(),this),this.onAdd(e),this.getAttribution&&this._map.attributionControl&&this._map.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),e.fire("layeradd",{layer:this}))}}),o.Map.include({addLayer:function(t){var e=o.stamp(t);return this._layers[e]?t:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),t.getEvents&&this.off(t.getEvents(),t),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&o.stamp(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_addZoomLimit:function(t){(isNaN(t.options.maxZoom)||!isNaN(t.options.minZoom))&&(this._zoomBoundLayers[o.stamp(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){var e=o.stamp(t);this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels())},_updateZoomLevels:function(){var t=1/0,e=-(1/0),n=this._getZoomSpan();for(var o in this._zoomBoundLayers){var s=this._zoomBoundLayers[o].options;t=s.minZoom===i?t:Math.min(t,s.minZoom),e=s.maxZoom===i?e:Math.max(e,s.maxZoom)}this._layersMaxZoom=e===-(1/0)?i:e,this._layersMinZoom=t===1/0?i:t,n!==this._getZoomSpan()&&this.fire("zoomlevelschange")}}),o.Projection.Mercator={R:6378137,R_MINOR:6356752.314245179,bounds:o.bounds([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,s=this.R_MINOR/i,r=Math.sqrt(1-s*s),a=r*Math.sin(n),h=Math.tan(Math.PI/4-n/2)/Math.pow((1-a)/(1+a),r/2);return n=-i*Math.log(Math.max(h,1e-10)),new o.Point(t.lng*e*i,n)},unproject:function(t){for(var e,i=180/Math.PI,n=this.R,s=this.R_MINOR/n,r=Math.sqrt(1-s*s),a=Math.exp(-t.y/n),h=Math.PI/2-2*Math.atan(a),l=0,u=.1;15>l&&Math.abs(u)>1e-7;l++)e=r*Math.sin(h),e=Math.pow((1-e)/(1+e),r/2),u=Math.PI/2-2*Math.atan(a*e)-h,h+=u;return new o.LatLng(h*i,t.x*i/n)}},o.CRS.EPSG3395=o.extend({},o.CRS.Earth,{code:"EPSG:3395",projection:o.Projection.Mercator,transformation:function(){var t=.5/(Math.PI*o.Projection.Mercator.R);return new o.Transformation(t,.5,-t,.5)}()}),o.GridLayer=o.Layer.extend({options:{pane:"tilePane",tileSize:256,opacity:1,zIndex:1,updateWhenIdle:o.Browser.mobile,updateInterval:200,attribution:null,bounds:null,minZoom:0},initialize:function(t){t=o.setOptions(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView(),this._update()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){o.DomUtil.remove(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=null},bringToFront:function(){return this._map&&(o.DomUtil.toFront(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(o.DomUtil.toBack(this._container),this._setAutoZIndex(Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){return this._map&&(this._removeAllTiles(),this._update()),this},getEvents:function(){var t={viewreset:this._resetAll,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=o.Util.throttle(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return e.createElement("div")},getTileSize:function(){var t=this.options.tileSize;return t instanceof o.Point?t:new o.Point(t,t)},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var e,i=this.getPane().children,n=-t(-(1/0),1/0),o=0,s=i.length;s>o;o++)e=i[o].style.zIndex,i[o]!==this._container&&e&&(n=t(n,+e));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!o.Browser.ielt9&&this._map._fadeAnimated){o.DomUtil.setOpacity(this._container,this.options.opacity);var t=+new Date,e=!1,i=!1;for(var n in this._tiles){var s=this._tiles[n];if(s.current&&s.loaded){var r=Math.min(1,(t-s.loaded)/200);o.DomUtil.setOpacity(s.el,r),1>r?e=!0:(s.active&&(i=!0),s.active=!0)}}i&&!this._noPrune&&this._pruneTiles(),e&&(o.Util.cancelAnimFrame(this._fadeFrame),this._fadeFrame=o.Util.requestAnimFrame(this._updateOpacity,this))}},_initContainer:function(){this._container||(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,e=this.options.maxZoom;for(var i in this._levels)this._levels[i].el.children.length||i===t?this._levels[i].el.style.zIndex=e-Math.abs(t-i):(o.DomUtil.remove(this._levels[i].el),delete this._levels[i]);var n=this._levels[t],s=this._map;return n||(n=this._levels[t]={},n.el=o.DomUtil.create("div","leaflet-tile-container leaflet-zoom-animated",this._container),n.el.style.zIndex=e,n.origin=s.project(s.unproject(s.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,s.getCenter(),s.getZoom()),o.Util.falseFn(n.el.offsetWidth)),this._level=n,n},_pruneTiles:function(){var t,e,i=this._map.getZoom();if(i>this.options.maxZoom||i<this.options.minZoom)return this._removeAllTiles();for(t in this._tiles)e=this._tiles[t],e.retain=e.current;for(t in this._tiles)if(e=this._tiles[t],e.current&&!e.active){var n=e.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_resetAll:function(){for(var t in this._levels)o.DomUtil.remove(this._levels[t].el),delete this._levels[t];this._removeAllTiles(),this._tileZoom=null,this._resetView()},_retainParent:function(t,e,i,n){var o=Math.floor(t/2),s=Math.floor(e/2),r=i-1,a=o+":"+s+":"+r,h=this._tiles[a];return h&&h.active?(h.retain=!0,!0):(h&&h.loaded&&(h.retain=!0),r>n?this._retainParent(o,s,r,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;2*t+2>o;o++)for(var s=2*e;2*e+2>s;s++){var r=o+":"+s+":"+(i+1),a=this._tiles[r];a&&a.active?a.retain=!0:(a&&a.loaded&&(a.retain=!0),n>i+1&&this._retainChildren(o,s,i+1,n))}},_resetView:function(t){var e=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),e,e)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_setView:function(t,e,n,o){var s=Math.round(e);(this.options.maxZoom!==i&&s>this.options.maxZoom||this.options.minZoom!==i&&s<this.options.minZoom)&&(s=i);var r=s!==this._tileZoom;(!o||r)&&(this._tileZoom=s,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),s!==i&&this._update(t),n||this._pruneTiles(),this._noPrune=!!n),this._setZoomTransforms(t,e)},_setZoomTransforms:function(t,e){for(var i in this._levels)this._setZoomTransform(this._levels[i],t,e)},_setZoomTransform:function(t,e,i){var n=this._map.getZoomScale(i,t.zoom),s=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e,i)).round();o.Browser.any3d?o.DomUtil.setTransform(t.el,s,n):o.DomUtil.setPosition(t.el,s)},_resetGrid:function(){var t=this._map,e=t.options.crs,i=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,e.wrapLng[0]],n).x/i.x),Math.ceil(t.project([0,e.wrapLng[1]],n).x/i.y)],this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0],0],n).y/i.x),Math.ceil(t.project([e.wrapLat[1],0],n).y/i.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._resetView()},_getTiledPixelBounds:function(t,e,i){var n=this._map,s=n.getZoomScale(e,i),r=n.project(t,i).floor(),a=n.getSize().divideBy(2*s);return new o.Bounds(r.subtract(a),r.add(a))},_update:function(t){var n=this._map;if(n){var s=n.getZoom();if(t===i&&(t=n.getCenter()),this._tileZoom!==i){var r=this._getTiledPixelBounds(t,s,this._tileZoom),a=this._pxBoundsToTileRange(r),h=a.getCenter(),l=[];for(var u in this._tiles)this._tiles[u].current=!1;if(Math.abs(s-this._tileZoom)>1)return void this._setView(t,s);for(var c=a.min.y;c<=a.max.y;c++)for(var d=a.min.x;d<=a.max.x;d++){var _=new o.Point(d,c);if(_.z=this._tileZoom,this._isValidTile(_)){var m=this._tiles[this._tileCoordsToKey(_)];m?m.current=!0:l.push(_)}}if(l.sort(function(t,e){return t.distanceTo(h)-e.distanceTo(h)}),0!==l.length){this._loading||(this._loading=!0,this.fire("loading"));var p=e.createDocumentFragment();for(d=0;d<l.length;d++)this._addTile(l[d],p);this._level.el.appendChild(p)}}}},_isValidTile:function(t){var e=this._map.options.crs;if(!e.infinite){var i=this._globalTileRange;if(!e.wrapLng&&(t.x<i.min.x||t.x>i.max.x)||!e.wrapLat&&(t.y<i.min.y||t.y>i.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return o.latLngBounds(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToBounds:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),s=n.add(i),r=e.wrapLatLng(e.unproject(n,t.z)),a=e.wrapLatLng(e.unproject(s,t.z));return new o.LatLngBounds(r,a)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new o.Point(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(o.DomUtil.remove(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){o.DomUtil.addClass(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=o.Util.falseFn,t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity<1&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.android&&!o.Browser.android23&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),o.bind(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&o.Util.requestAnimFrame(o.bind(this._tileReady,this,t,null,s)),o.DomUtil.setPosition(s,i),this._tiles[n]={el:s,coords:t,current:!0},e.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,e,i){if(this._map){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(o.DomUtil.setOpacity(i.el,0),o.Util.cancelAnimFrame(this._fadeFrame),this._fadeFrame=o.Util.requestAnimFrame(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),o.DomUtil.addClass(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t}),this._noTilesToLoad()&&(this._loading=!1,this.fire("load")))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new o.Point(this._wrapX?o.Util.wrapNum(t.x,this._wrapX):t.x,this._wrapY?o.Util.wrapNum(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new o.Bounds(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),o.gridLayer=function(t){return new o.GridLayer(t)},o.TileLayer=o.GridLayer.extend({options:{maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,maxNativeZoom:null,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,e){this._url=t,e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom=Math.max(0,e.minZoom),e.maxZoom--),"string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")),o.Browser.android||this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},createTile:function(t,i){var n=e.createElement("img");return o.DomEvent.on(n,"load",o.bind(this._tileOnLoad,this,i,n)),o.DomEvent.on(n,"error",o.bind(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.src=this.getTileUrl(t),n},getTileUrl:function(t){return o.Util.template(this._url,o.extend({r:this.options.detectRetina&&o.Browser.retina&&this.options.maxZoom>0?"@2x":"",s:this._getSubdomain(t),x:t.x,y:this.options.tms?this._globalTileRange.max.y-t.y:t.y,z:this._getZoomForUrl()},this.options))},_tileOnLoad:function(t,e){o.Browser.ielt9?setTimeout(o.bind(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&(e.src=n),t(i,e)},getTileSize:function(){var t=this._map,e=o.GridLayer.prototype.getTileSize.call(this),i=this._tileZoom+this.options.zoomOffset,n=this.options.maxNativeZoom;return null!==n&&i>n?e.divideBy(t.getZoomScale(n,i)).round():e},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this.options,e=this._tileZoom;return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,null!==t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=o.Util.falseFn,e.onerror=o.Util.falseFn,e.complete||(e.src=o.Util.emptyImageUrl,o.DomUtil.remove(e)))}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=o.setOptions(this,e),i.width=i.height=e.tileSize*(e.detectRetina&&o.Browser.retina?2:1),this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToBounds(t),i=this._crs.project(e.getNorthWest()),n=this._crs.project(e.getSouthEast()),s=(this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[n.y,i.x,i.y,n.x]:[i.x,n.y,n.x,i.y]).join(","),r=o.TileLayer.prototype.getTileUrl.call(this,t);return r+o.Util.getParamString(this.wmsParams,r,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+s},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.ImageOverlay=o.Layer.extend({options:{opacity:1,alt:"",interactive:!1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(o.DomUtil.addClass(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){o.DomUtil.remove(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&o.DomUtil.toFront(this._image),this},bringToBack:function(){return this._map&&o.DomUtil.toBack(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=t,this._map&&this._reset(),this},getAttribution:function(){return this.options.attribution},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._image=o.DomUtil.create("img","leaflet-image-layer "+(this._zoomAnimated?"leaflet-zoom-animated":""));t.onselectstart=o.Util.falseFn,t.onmousemove=o.Util.falseFn,t.onload=o.bind(this.fire,this,"load"),this.options.crossOrigin&&(t.crossOrigin=""),t.src=this._url,t.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngToNewLayerPoint(this._bounds.getNorthWest(),t.zoom,t.center);o.DomUtil.setTransform(this._image,i,e)},_reset:function(){var t=this._image,e=new o.Bounds(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();o.DomUtil.setPosition(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n=this._createImg(i,e&&"IMG"===e.tagName?e:null);return this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i=this.options,n=o.point(i[e+"Size"]),s=o.point("shadow"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2,!0));t.className="leaflet-marker-"+e+" "+(i.className||""),s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+(o.Browser.retina&&"icon"===t?"-2x":"")+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=s.length;i>t;t++)if(n=s[t].src||"",n.match(r))return o=n.split(r)[0],(o?o+"/":"")+"images"}(),o.Marker=o.Layer.extend({options:{pane:"markerPane",nonBubblingEvents:["click","dblclick","mouseover","mouseout","contextmenu"],icon:new o.Icon.Default,interactive:!0,keyboard:!0,zIndexOffset:0,opacity:1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._initIcon(),this.update()},onRemove:function(){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),this._removeIcon(),this._removeShadow()},getEvents:function(){var t={zoom:this.update,viewreset:this.update};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},getLatLng:function(){return this._latlng},setLatLng:function(t){var e=this._latlng;return this._latlng=o.latLng(t),this.update(),this.fire("move",{oldLatLng:e,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,e="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),i=t.icon.createIcon(this._icon),n=!1;i!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(i.title=t.title),t.alt&&(i.alt=t.alt)),o.DomUtil.addClass(i,e),t.keyboard&&(i.tabIndex="0"),this._icon=i,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex});var s=t.icon.createShadow(this._shadow),r=!1;s!==this._shadow&&(this._removeShadow(),r=!0),s&&o.DomUtil.addClass(s,e),this._shadow=s,t.opacity<1&&this._updateOpacity(),n&&(this.getPane().appendChild(this._icon),this._initInteraction()),s&&r&&this.getPane("shadowPane").appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),o.DomUtil.remove(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&o.DomUtil.remove(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.interactive&&(o.DomUtil.addClass(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),o.Handler.MarkerDrag)){var t=this.options.draggable;this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new o.Handler.MarkerDrag(this),t&&this.dragging.enable()}},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;o.DomUtil.setOpacity(this._icon,t),this._shadow&&o.DomUtil.setOpacity(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),o.marker=function(t,e){return new o.Marker(t,e)},o.DivIcon=o.Icon.extend({options:{iconSize:[12,12],className:"leaflet-div-icon",html:!1},createIcon:function(t){var i=t&&"DIV"===t.tagName?t:e.createElement("div"),n=this.options;return i.innerHTML=n.html!==!1?n.html:"",n.bgPos&&(i.style.backgroundPosition=-n.bgPos.x+"px "+-n.bgPos.y+"px"),this._setIconStyles(i,"icon"),i},createShadow:function(){return null}}),o.divIcon=function(t){return new o.DivIcon(t)},o.Map.mergeOptions({closePopupOnClick:!0}),o.Popup=o.Layer.extend({options:{pane:"popupPane",minWidth:50,maxWidth:300,offset:[0,7],autoPan:!0,autoPanPadding:[5,5],closeButton:!0,autoClose:!0,zoomAnimation:!0},initialize:function(t,e){o.setOptions(this,t),this._source=e},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&this.options.zoomAnimation,this._container||this._initLayout(),t._fadeAnimated&&o.DomUtil.setOpacity(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&o.DomUtil.setOpacity(this._container,1),t.fire("popupopen",{popup:this}),this._source&&this._source.fire("popupopen",{popup:this},!0)},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._fadeAnimated?(o.DomUtil.setOpacity(this._container,0),this._removeTimeout=setTimeout(o.bind(o.DomUtil.remove,o.DomUtil,this._container),200)):o.DomUtil.remove(this._container),t.fire("popupclose",{popup:this}),this._source&&this._source.fire("popupclose",{popup:this},!0)},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),("closeOnClick"in this.options?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&o.DomUtil.toFront(this._container),this},bringToBack:function(){return this._map&&o.DomUtil.toBack(this._container),this},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t="leaflet-popup",e=this._container=o.DomUtil.create("div",t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"));if(this.options.closeButton){var i=this._closeButton=o.DomUtil.create("a",t+"-close-button",e);i.href="#close",i.innerHTML="×",o.DomEvent.on(i,"click",this._onCloseButtonClick,this)}var n=this._wrapper=o.DomUtil.create("div",t+"-content-wrapper",e);this._contentNode=o.DomUtil.create("div",t+"-content",n),o.DomEvent.disableClickPropagation(n).disableScrollPropagation(this._contentNode).on(n,"contextmenu",o.DomEvent.stopPropagation),this._tipContainer=o.DomUtil.create("div",t+"-tip-container",e),this._tip=o.DomUtil.create("div",t+"-tip",this._tipContainer)},_updateContent:function(){if(this._content){var t=this._contentNode,e="function"==typeof this._content?this._content(this._source||this):this._content;if("string"==typeof e)t.innerHTML=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(e)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,e=t.style;e.width="",e.whiteSpace="nowrap";var i=t.offsetWidth;i=Math.min(i,this.options.maxWidth),i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="";var n=t.offsetHeight,s=this.options.maxHeight,r="leaflet-popup-scrolled";s&&n>s?(e.height=s+"px",o.DomUtil.addClass(t,r)):o.DomUtil.removeClass(t,r),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=o.point(this.options.offset);this._zoomAnimated?o.DomUtil.setPosition(this._container,t):e=e.add(t);var i=this._containerBottom=-e.y,n=this._containerLeft=-Math.round(this._containerWidth/2)+e.x;this._container.style.bottom=i+"px",this._container.style.left=n+"px"}},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._zoomAnimated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),r=o.point(this.options.autoPanPadding),a=o.point(this.options.autoPanPaddingTopLeft||r),h=o.point(this.options.autoPanPaddingBottomRight||r),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-a.x<0&&(u=s.x-a.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){return t instanceof o.Popup||(t=new o.Popup(i).setContent(t)),e&&t.setLatLng(e),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),o.Layer.include({bindPopup:function(t,e){return t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):((!this._popup||e)&&(this._popup=new o.Popup(e,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this._originalPopupOffset=this._popup.options.offset,this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,e){if(t instanceof o.Layer||(e=t,t=this),t instanceof o.FeatureGroup)for(var i in this._layers){t=this._layers[i];break}return e||(e=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup.options.offset=this._popupAnchor(t),this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,e)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e=t.layer||t.target;if(this._popup&&this._map)return e instanceof o.Path?void this.openPopup(t.layer||t.target,t.latlng):void(this._map.hasLayer(this._popup)&&this._popup._source===e?this.closePopup():this.openPopup(e,t.latlng))},_popupAnchor:function(t){var e=t._getPopupAnchor?t._getPopupAnchor():[0,0],i=this._originalPopupOffset||o.Popup.prototype.options.offset;return o.point(e).add(i)},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.Marker.include({_getPopupAnchor:function(){return this.options.icon.options.popupAnchor||[0,0]}}),o.LayerGroup=o.Layer.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]), +delete this._layers[e],this},hasLayer:function(t){return!!t&&(t in this._layers||this.getLayerId(t)in this._layers)},clearLayers:function(){for(var t in this._layers)this.removeLayer(this._layers[t]);return this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){for(var e in this._layers)t.addLayer(this._layers[e])},onRemove:function(t){for(var e in this._layers)t.removeLayer(this._layers[e])},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),o.LayerGroup.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.removeEventParent(this),o.LayerGroup.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;for(var e in this._layers){var i=this._layers[e];t.extend(i.getBounds?i.getBounds():i.getLatLng())}return t}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Renderer=o.Layer.extend({options:{padding:.1},initialize:function(t){o.setOptions(this,t),o.stamp(this)},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&o.DomUtil.addClass(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update()},onRemove:function(){o.DomUtil.remove(this._container)},getEvents:function(){var t={viewreset:this._reset,zoomstart:this._onZoomStart,zoom:this._onZoom,moveend:this._update};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_onZoomStart:function(){this._update()},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=o.DomUtil.getPosition(this._container),s=this._map.getSize().multiplyBy(.5+this.options.padding),r=this._map.project(this._center,e),a=this._map.project(t,e),h=a.subtract(r),l=s.multiplyBy(-i).add(n).add(s).subtract(h);o.DomUtil.setTransform(this._container,l,i)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom)},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new o.Bounds(i,i.add(e.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),o.Map.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this.options.preferCanvas&&o.canvas()||o.svg()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if("overlayPane"===t||t===i)return!1;var e=this._paneRenderers[t];return e===i&&(e=o.SVG&&o.svg({pane:t})||o.Canvas&&o.canvas({pane:t}),this._paneRenderers[t]=e),e}}),o.Path=o.Layer.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",fillOpacity:.2,fillRule:"evenodd",interactive:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},getEvents:function(){return{zoomend:this._project,moveend:this._update,viewreset:this._reset}},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return o.setOptions(this,t),this._renderer&&this._renderer._updateStyle(this),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(o.Browser.touch?10:0)}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var r,a=[];for(r=0;n>r;r++)s[r]&&a.push(t[r]);return a},_simplifyDPStep:function(t,e,i,n,o){var s,r,a,h=0;for(r=n+1;o-1>=r;r++)a=this._sqClosestPointOnSegment(t[r],t[n],t[o],!0),a>h&&(s=r,h=a);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n,o){var s,r,a,h=n?this._lastCode:this._getBitCode(t,i),l=this._getBitCode(e,i);for(this._lastCode=l;;){if(!(h|l))return[t,e];if(h&l)return!1;s=h||l,r=this._getEdgeIntersection(t,e,s,i,o),a=this._getBitCode(r,i),s===h?(t=r,h=a):(e=r,l=a)}},_getEdgeIntersection:function(t,e,i,n,s){var r,a,h=e.x-t.x,l=e.y-t.y,u=n.min,c=n.max;return 8&i?(r=t.x+h*(c.y-t.y)/l,a=c.y):4&i?(r=t.x+h*(u.y-t.y)/l,a=u.y):2&i?(r=c.x,a=t.y+l*(c.x-t.x)/h):1&i&&(r=u.x,a=t.y+l*(u.x-t.x)/h),new o.Point(r,a,s)},_getBitCode:function(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,r=e.x,a=e.y,h=i.x-r,l=i.y-a,u=h*h+l*l;return u>0&&(s=((t.x-r)*h+(t.y-a)*l)/u,s>1?(r=i.x,a=i.y):s>0&&(r+=h*s,a+=l*s)),h=t.x-r,l=t.y-a,n?h*h+l*l:new o.Point(r,a)}},o.Polyline=o.Path.extend({options:{smoothFactor:1},initialize:function(t,e){o.setOptions(this,e),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var e,i,n=1/0,s=null,r=o.LineUtil._sqClosestPointOnSegment,a=0,h=this._parts.length;h>a;a++)for(var l=this._parts[a],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=r(t,e,i,!0);n>d&&(n=d,s=r(t,e,i))}return s&&(s.distance=Math.sqrt(n)),s},getCenter:function(){var t,e,i,n,o,s,r,a=this._rings[0],h=a.length;if(!h)return null;for(t=0,e=0;h-1>t;t++)e+=a[t].distanceTo(a[t+1])/2;if(0===e)return this._map.layerPointToLatLng(a[0]);for(t=0,n=0;h-1>t;t++)if(o=a[t],s=a[t+1],i=o.distanceTo(s),n+=i,n>e)return r=(n-e)/i,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,e){return e=e||this._defaultShape(),t=o.latLng(t),e.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new o.LatLngBounds,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return o.Polyline._flat(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var e=[],i=o.Polyline._flat(t),n=0,s=t.length;s>n;n++)i?(e[n]=o.latLng(t[n]),this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);return e},_project:function(){this._rings=[],this._projectLatlngs(this._latlngs,this._rings);var t=this._clickTolerance(),e=new o.Point(t,-t);this._bounds.isValid()&&(this._pxBounds=new o.Bounds(this._map.latLngToLayerPoint(this._bounds.getSouthWest())._subtract(e),this._map.latLngToLayerPoint(this._bounds.getNorthEast())._add(e)))},_projectLatlngs:function(t,e){var i,n,s=t[0]instanceof o.LatLng,r=t.length;if(s){for(n=[],i=0;r>i;i++)n[i]=this._map.latLngToLayerPoint(t[i]);e.push(n)}else for(i=0;r>i;i++)this._projectLatlngs(t[i],e)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t)){if(this.options.noClip)return void(this._parts=this._rings);var e,i,n,s,r,a,h,l=this._parts;for(e=0,n=0,s=this._rings.length;s>e;e++)for(h=this._rings[e],i=0,r=h.length;r-1>i;i++)a=o.LineUtil.clipSegment(h[i],h[i+1],t,i,!0),a&&(l[n]=l[n]||[],l[n].push(a[0]),(a[1]!==h[i+1]||i===r-2)&&(l[n].push(a[1]),n++))}},_simplifyPoints:function(){for(var t=this._parts,e=this.options.smoothFactor,i=0,n=t.length;n>i;i++)t[i]=o.LineUtil.simplify(t[i],e)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.Polyline._flat=function(t){return!o.Util.isArray(t[0])||"object"!=typeof t[0][0]&&"undefined"!=typeof t[0][0]},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e,i){var n,s,r,a,h,l,u,c,d,_=[1,4,2,8],m=o.LineUtil;for(s=0,u=t.length;u>s;s++)t[s]._code=m._getBitCode(t[s],e);for(a=0;4>a;a++){for(c=_[a],n=[],s=0,u=t.length,r=u-1;u>s;r=s++)h=t[s],l=t[r],h._code&c?l._code&c||(d=m._getEdgeIntersection(l,h,c,e,i),d._code=m._getBitCode(d,e),n.push(d)):(l._code&c&&(d=m._getEdgeIntersection(l,h,c,e,i),d._code=m._getBitCode(d,e),n.push(d)),n.push(h));t=n}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){var t,e,i,n,o,s,r,a,h,l=this._rings[0],u=l.length;if(!u)return null;for(s=r=a=0,t=0,e=u-1;u>t;e=t++)i=l[t],n=l[e],o=i.y*n.x-n.y*i.x,r+=(i.x+n.x)*o,a+=(i.y+n.y)*o,s+=3*o;return h=0===s?l[0]:[r/s,a/s],this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var e=o.Polyline.prototype._convertLatLngs.call(this,t),i=e.length;return i>=2&&e[0]instanceof o.LatLng&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){o.Polyline.prototype._setLatLngs.call(this,t),o.Polyline._flat(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return o.Polyline._flat(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new o.Point(e,e);if(t=new o.Bounds(t.min.subtract(i),t.max.add(i)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t)){if(this.options.noClip)return void(this._parts=this._rings);for(var n,s=0,r=this._rings.length;r>s;s++)n=o.PolyUtil.clipPolygon(this._rings[s],t,!0),n.length&&this._parts.push(n)}},_updatePath:function(){this._renderer._updatePoly(this,!0)}}),o.polygon=function(t,e){return new o.Polygon(t,e)},o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.CircleMarker=o.Path.extend({options:{fill:!0,radius:10},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t),this._radius=this.options.radius},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw(),this.fire("move",{latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var e=t&&t.radius||this._radius;return o.Path.prototype.setStyle.call(this,t),this.setRadius(e),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,e=this._radiusY||t,i=this._clickTolerance(),n=[t+i,e+i];this._pxBounds=new o.Bounds(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)}}),o.circleMarker=function(t,e){return new o.CircleMarker(t,e)},o.Circle=o.CircleMarker.extend({initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t),this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new o.LatLngBounds(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:o.Path.prototype.setStyle,_project:function(){var t=this._latlng.lng,e=this._latlng.lat,i=this._map,n=i.options.crs;if(n.distance===o.CRS.Earth.distance){var s=Math.PI/180,r=this._mRadius/o.CRS.Earth.R/s,a=i.project([e+r,t]),h=i.project([e-r,t]),l=a.add(h).divideBy(2),u=i.unproject(l).lat,c=Math.acos((Math.cos(r*s)-Math.sin(e*s)*Math.sin(u*s))/(Math.cos(e*s)*Math.cos(u*s)))/s;this._point=l.subtract(i.getPixelOrigin()),this._radius=isNaN(c)?0:Math.max(Math.round(l.x-i.project([u,t-c]).x),1),this._radiusY=Math.max(Math.round(l.y-a.y),1)}else{var d=n.unproject(n.project(this._latlng).subtract([this._mRadius,0]));this._point=i.latLngToLayerPoint(this._latlng),this._radius=this._point.x-i.latLngToLayerPoint(d).x}this._updateBounds()}}),o.circle=function(t,e,i){return"number"==typeof e&&(e=o.extend({},i,{radius:e})),new o.Circle(t,e)},o.SVG=o.Renderer.extend({_initContainer:function(){this._container=o.SVG.create("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=o.SVG.create("g"),this._container.appendChild(this._rootGroup)},_update:function(){if(!this._map._animatingZoom||!this._bounds){o.Renderer.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),o.DomUtil.setPosition(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" "))}},_initPath:function(t){var e=t._path=o.SVG.create("path");t.options.className&&o.DomUtil.addClass(e,t.options.className),t.options.interactive&&o.DomUtil.addClass(e,"leaflet-interactive"),this._updateStyle(t)},_addPath:function(t){this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){o.DomUtil.remove(t._path),t.removeInteractiveTarget(t._path)},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"),e.setAttribute("pointer-events",i.pointerEvents||(i.interactive?"visiblePainted":"none")))},_updatePoly:function(t,e){this._setPath(t,o.SVG.pointsToPath(t._parts,e))},_updateCircle:function(t){var e=t._point,i=t._radius,n=t._radiusY||i,o="a"+i+","+n+" 0 1,0 ",s=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+2*i+",0 "+o+2*-i+",0 ";this._setPath(t,s)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){o.DomUtil.toFront(t._path)},_bringToBack:function(t){o.DomUtil.toBack(t._path)}}),o.extend(o.SVG,{create:function(t){return e.createElementNS("http://www.w3.org/2000/svg",t)},pointsToPath:function(t,e){var i,n,s,r,a,h,l="";for(i=0,s=t.length;s>i;i++){for(a=t[i],n=0,r=a.length;r>n;n++)h=a[n],l+=(n?"L":"M")+h.x+" "+h.y;l+=e?o.Browser.svg?"z":"x":""}return l||"M0 0"}}),o.Browser.svg=!(!e.createElementNS||!o.SVG.create("svg").createSVGRect),o.svg=function(t){return o.Browser.svg||o.Browser.vml?new o.SVG(t):null},o.Browser.vml=!o.Browser.svg&&function(){try{var t=e.createElement("div");t.innerHTML='<v:shape adj="1"/>';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.SVG.include(o.Browser.vml?{_initContainer:function(){this._container=o.DomUtil.create("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||o.Renderer.prototype._update.call(this)},_initPath:function(t){var e=t._container=o.SVG.create("shape");o.DomUtil.addClass(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=o.SVG.create("path"),e.appendChild(t._path),this._updateStyle(t)},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;o.DomUtil.remove(e),t.removeInteractiveTarget(e)},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,s=t._container;s.stroked=!!n.stroke,s.filled=!!n.fill,n.stroke?(e||(e=t._stroke=o.SVG.create("stroke")),s.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=o.Util.isArray(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(s.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=o.SVG.create("fill")),s.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(s.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){o.DomUtil.toFront(t._container)},_bringToBack:function(t){o.DomUtil.toBack(t._container)}}:{}),o.Browser.vml&&(o.SVG.create=function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("<lvml:"+t+' class="lvml">')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}()),o.Canvas=o.Renderer.extend({onAdd:function(){o.Renderer.prototype.onAdd.call(this),this._layers=this._layers||{},this._draw()},_initContainer:function(){var t=this._container=e.createElement("canvas");o.DomEvent.on(t,"mousemove",o.Util.throttle(this._onMouseMove,32,this),this).on(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this).on(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},o.Renderer.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=o.Browser.retina?2:1;o.DomUtil.setPosition(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",o.Browser.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y)}},_initPath:function(t){this._layers[o.stamp(t)]=t},_addPath:o.Util.falseFn,_removePath:function(t){t._removed=!0,this._requestRedraw(t)},_updatePath:function(t){this._redrawBounds=t._pxBounds,this._draw(!0),t._project(),t._update(),this._draw(),this._redrawBounds=null},_updateStyle:function(t){this._requestRedraw(t)},_requestRedraw:function(t){if(this._map){var e=(t.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new o.Bounds,this._redrawBounds.extend(t._pxBounds.min.subtract([e,e])),this._redrawBounds.extend(t._pxBounds.max.add([e,e])),this._redrawRequest=this._redrawRequest||o.Util.requestAnimFrame(this._redraw,this)}},_redraw:function(){this._redrawRequest=null,this._draw(!0),this._draw(),this._redrawBounds=null},_draw:function(t){this._clear=t;var e,i=this._redrawBounds;this._ctx.save(),i&&(this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,i.max.x-i.min.x,i.max.y-i.min.y),this._ctx.clip());for(var n in this._layers)e=this._layers[n],(!i||e._pxBounds.intersects(i))&&e._updatePath(),t&&e._removed&&(delete e._removed,delete this._layers[n]);this._ctx.restore()},_updatePoly:function(t,e){var i,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(this._drawnLayers[t._leaflet_id]=t,h.beginPath(),i=0;a>i;i++){for(n=0,o=r[i].length;o>n;n++)s=r[i][n],h[n?"lineTo":"moveTo"](s.x,s.y);e&&h.closePath()}this._fillStroke(h,t)}},_updateCircle:function(t){if(!t._empty()){var e=t._point,i=this._ctx,n=t._radius,o=(t._radiusY||n)/n;1!==o&&(i.save(),i.scale(1,o)),i.beginPath(),i.arc(e.x,e.y/o,n,0,2*Math.PI,!1),1!==o&&i.restore(),this._fillStroke(i,t)}},_fillStroke:function(t,e){var i=this._clear,n=e.options;t.globalCompositeOperation=i?"destination-out":"source-over",n.fill&&(t.globalAlpha=i?1:n.fillOpacity,t.fillStyle=n.fillColor||n.color,t.fill(n.fillRule||"evenodd")),n.stroke&&0!==n.weight&&(t.globalAlpha=i?1:n.opacity,e._prevWeight=t.lineWidth=i?e._prevWeight+1:n.weight,t.strokeStyle=n.color,t.lineCap=n.lineCap,t.lineJoin=n.lineJoin,t.stroke())},_onClick:function(t){var e=this._map.mouseEventToLayerPoint(t),i=[];for(var n in this._layers)this._layers[n]._containsPoint(e)&&(o.DomEvent._fakeStop(t),i.push(this._layers[n]));i.length&&this._fireEvent(i,t)},_onMouseMove:function(t){if(this._map&&!this._map.dragging._draggable._moving&&!this._map._animatingZoom){var e=this._map.mouseEventToLayerPoint(t);this._handleMouseOut(t,e),this._handleMouseHover(t,e)}},_handleMouseOut:function(t,e){var i=this._hoveredLayer;!i||"mouseout"!==t.type&&i._containsPoint(e)||(o.DomUtil.removeClass(this._container,"leaflet-interactive"),this._fireEvent([i],t,"mouseout"),this._hoveredLayer=null)},_handleMouseHover:function(t,e){var i,n;if(!this._hoveredLayer)for(i in this._drawnLayers)if(n=this._drawnLayers[i],n.options.interactive&&n._containsPoint(e)){o.DomUtil.addClass(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n;break}this._hoveredLayer&&this._fireEvent([this._hoveredLayer],t)},_fireEvent:function(t,e,i){this._map._fireDOMEvent(e,i||e.type,t)},_bringToFront:o.Util.falseFn,_bringToBack:o.Util.falseFn}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.canvas=function(t){return o.Browser.canvas?new o.Canvas(t):null},o.Polyline.prototype._containsPoint=function(t,e){var i,n,s,r,a,h,l=this._clickTolerance();if(!this._pxBounds.contains(t))return!1;for(i=0,r=this._parts.length;r>i;i++)for(h=this._parts[i],n=0,a=h.length,s=a-1;a>n;s=n++)if((e||0!==n)&&o.LineUtil.pointToSegmentDistance(t,h[s],h[n])<=l)return!0;return!1},o.Polygon.prototype._containsPoint=function(t){var e,i,n,s,r,a,h,l,u=!1;if(!this._pxBounds.contains(t))return!1;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],r=0,l=e.length,a=l-1;l>r;a=r++)i=e[r],n=e[a],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u||o.Polyline.prototype._containsPoint.call(this,t,!0)},o.CircleMarker.prototype._containsPoint=function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()},o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var r=this.options;if(r.filter&&!r.filter(t))return this;var a=o.GeoJSON.geometryToLayer(t,r);return a?(a.feature=o.GeoJSON.asFeature(t),a.defaultOptions=a.options,this.resetStyle(a),r.onEachFeature&&r.onEachFeature(t,a),this.addLayer(a)):this},resetStyle:function(t){return t.options=t.defaultOptions,this._setLayerStyle(t,this.options.style),this},setStyle:function(t){return this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e){var i,n,s,r,a="Feature"===t.type?t.geometry:t,h=a?a.coordinates:null,l=[],u=e&&e.pointToLayer,c=e&&e.coordsToLatLng||this.coordsToLatLng;if(!h&&!a)return null;switch(a.type){case"Point":return i=c(h),u?u(t,i):new o.Marker(i);case"MultiPoint":for(s=0,r=h.length;r>s;s++)i=c(h[s]),l.push(u?u(t,i):new o.Marker(i));return new o.FeatureGroup(l);case"LineString":case"MultiLineString":return n=this.coordsToLatLngs(h,"LineString"===a.type?0:1,c),new o.Polyline(n,e);case"Polygon":case"MultiPolygon":return n=this.coordsToLatLngs(h,"Polygon"===a.type?1:2,c),new o.Polygon(n,e);case"GeometryCollection":for(s=0,r=a.geometries.length;r>s;s++){var d=this.geometryToLayer({geometry:a.geometries[s],type:"Feature",properties:t.properties},e);d&&l.push(d)}return new o.FeatureGroup(l);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){for(var n,o=[],s=0,r=t.length;r>s;s++)n=e?this.coordsToLatLngs(t[s],e-1,i):(i||this.coordsToLatLng)(t[s]),o.push(n);return o},latLngToCoords:function(t){return t.alt!==i?[t.lng,t.lat,t.alt]:[t.lng,t.lat]},latLngsToCoords:function(t,e,i){for(var n=[],s=0,r=t.length;r>s;s++)n.push(e?o.GeoJSON.latLngsToCoords(t[s],e-1,i):o.GeoJSON.latLngToCoords(t[s]));return!e&&i&&n.push(n[0]),n},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var r={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(r),o.Circle.include(r),o.CircleMarker.include(r),o.Polyline.prototype.toGeoJSON=function(){var t=!o.Polyline._flat(this._latlngs),e=o.GeoJSON.latLngsToCoords(this._latlngs,t?1:0);return o.GeoJSON.getFeature(this,{type:(t?"Multi":"")+"LineString",coordinates:e})},o.Polygon.prototype.toGeoJSON=function(){var t=!o.Polyline._flat(this._latlngs),e=t&&!o.Polyline._flat(this._latlngs[0]),i=o.GeoJSON.latLngsToCoords(this._latlngs,e?2:t?1:0,!0);return t||(i=[i]),o.GeoJSON.getFeature(this,{type:(e?"Multi":"")+"Polygon",coordinates:i})},o.LayerGroup.include({toMultiPoint:function(){var t=[];return this.eachLayer(function(e){t.push(e.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:"MultiPoint",coordinates:t})},toGeoJSON:function(){var t=this.feature&&this.feature.geometry&&this.feature.geometry.type;if("MultiPoint"===t)return this.toMultiPoint();var e="GeometryCollection"===t,i=[];return this.eachLayer(function(t){if(t.toGeoJSON){var n=t.toGeoJSON();i.push(e?n.geometry:o.GeoJSON.asFeature(n))}}),e?o.GeoJSON.getFeature(this,{geometries:i,type:"GeometryCollection"}):{type:"FeatureCollection",features:i}}}),o.geoJson=function(t,e){return new o.GeoJSON(t,e)};var a="_leaflet_events";o.DomEvent={on:function(t,e,i,n){if("object"==typeof e)for(var s in e)this._on(t,s,e[s],i);else{e=o.Util.splitWords(e);for(var r=0,a=e.length;a>r;r++)this._on(t,e[r],i,n)}return this},off:function(t,e,i,n){if("object"==typeof e)for(var s in e)this._off(t,s,e[s],i);else{e=o.Util.splitWords(e);for(var r=0,a=e.length;a>r;r++)this._off(t,e[r],i,n)}return this},_on:function(e,i,n,s){var r=i+o.stamp(n)+(s?"_"+o.stamp(s):"");if(e[a]&&e[a][r])return this;var h=function(i){return n.call(s||e,i||t.event)},l=h;return o.Browser.pointer&&0===i.indexOf("touch")?this.addPointerListener(e,i,h,r):o.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener?this.addDoubleTapListener(e,h,r):"addEventListener"in e?"mousewheel"===i?(e.addEventListener("DOMMouseScroll",h,!1),e.addEventListener(i,h,!1)):"mouseenter"===i||"mouseleave"===i?(h=function(i){i=i||t.event,o.DomEvent._isExternalTarget(e,i)&&l(i)},e.addEventListener("mouseenter"===i?"mouseover":"mouseout",h,!1)):("click"===i&&o.Browser.android&&(h=function(t){return o.DomEvent._filterClick(t,l)}),e.addEventListener(i,h,!1)):"attachEvent"in e&&e.attachEvent("on"+i,h),e[a]=e[a]||{},e[a][r]=h,this},_off:function(t,e,i,n){var s=e+o.stamp(i)+(n?"_"+o.stamp(n):""),r=t[a]&&t[a][s];return r?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,s):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,s):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",r,!1),t.removeEventListener(e,r,!1)):t.removeEventListener("mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,r,!1):"detachEvent"in t&&t.detachEvent("on"+e,r),t[a][s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){return o.DomEvent.on(t,"mousewheel MozMousePixelScroll",o.DomEvent.stopPropagation)},disableClickPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,o.Draggable.START.join(" "),e),o.DomEvent.on(t,{click:o.DomEvent._fakeStop,dblclick:e})},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_isExternalTarget:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,void e(t))}},o.DomEvent.addListener=o.DomEvent.on,o.DomEvent.removeListener=o.DomEvent.off,o.Draggable=o.Evented.extend({statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e,i){this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(o.DomEvent.on(this._dragStartTarget,o.Draggable.START.join(" "),this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(o.DomEvent.off(this._dragStartTarget,o.Draggable.START.join(" "),this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._moved=!1,!o.DomUtil.hasClass(this._element,"leaflet-zoom-anim")&&!(o.Draggable._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches)&&this._enabled&&(o.Draggable._dragging=!0,this._preventOutline&&o.DomUtil.preventOutline(this._element),o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving)){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")), +this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._lastEvent=t,this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0)))},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire("predrag",t),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag",t)},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove,this).off(e,o.Draggable.END[t],this._onUp,this);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1,o.Draggable._dragging=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({down:this._onDown,dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}o.DomUtil.addClass(this._map._container,"leaflet-grab"),this._draggable.enable()},removeHooks:function(){o.DomUtil.removeClass(this._map._container,"leaflet-grab"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDown:function(){this._map.stop()},_onDragStart:function(){var t=this._map;if(this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=o.latLngBounds(this._map.options.maxBounds);this._offsetLimit=o.bounds(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),e-this._times[0]>50&&(this._positions.shift(),this._times.shift())}this._map.fire("move",t).fire("drag",t)},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.x<e.min.x&&(t.x=this._viscousLimit(t.x,e.min.x)),t.y<e.min.y&&(t.y=this._viscousLimit(t.y,e.min.y)),t.x>e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,r=Math.abs(o+i)<Math.abs(s+i)?o:s;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=r},_onDragEnd:function(t){var e=this._map,i=e.options,n=!i.inertia||this._times.length<2;if(e.fire("dragend",t),n)e.fire("moveend");else{var s=this._lastPos.subtract(this._positions[0]),r=(this._lastTime-this._times[0])/1e3,a=i.easeLinearity,h=s.multiplyBy(a/r),l=h.distanceTo([0,0]),u=Math.min(i.inertiaMaxSpeed,l),c=h.multiplyBy(u/l),d=u/(i.inertiaDeceleration*a),_=c.multiplyBy(-d/2).round();_.x||_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:d,easeLinearity:a,noMoveStart:!0,animate:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=t.originalEvent.shiftKey?Math.ceil(i)-1:Math.floor(i)+1;"center"===e.options.doubleClickZoom?e.setZoom(n):e.setZoomAround(t.containerPoint,n)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,{mousewheel:this._onWheelScroll,MozMousePixelScroll:o.DomEvent.preventDefault},this),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,{mousewheel:this._onWheelScroll,MozMousePixelScroll:o.DomEvent.preventDefault},this)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t),i=this._map.options.wheelDebounceTime;this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var n=Math.max(i-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),n),o.DomEvent.stop(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();t.stop(),e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,e,i){function n(t){var e;if(e=o.Browser.pointer?o.DomEvent._pointersCount:t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);a=t.touches?t.touches[0]:t,h=n>0&&l>=n,r=i}}function s(){if(h&&!a.cancelBubble){if(o.Browser.pointer){var t,i,n={};for(i in a)t=a[i],n[i]=t&&t.bind?t.bind(a):t;a=n}a.type="dblclick",e(a),r=null}}var r,a,h=!1,l=250,u="_leaflet_",c=this._touchstart,d=this._touchend;return t[u+c+i]=n,t[u+d+i]=s,t.addEventListener(c,n,!1),t.addEventListener(d,s,!1),this},removeDoubleTapListener:function(t,e){var i="_leaflet_",n=t[i+this._touchend+e];return t.removeEventListener(this._touchstart,t[i+this._touchstart+e],!1),t.removeEventListener(this._touchend,n,!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:{},_pointersCount:0,addPointerListener:function(t,e,i,n){return"touchstart"===e?this._addPointerStart(t,i,n):"touchmove"===e?this._addPointerMove(t,i,n):"touchend"===e&&this._addPointerEnd(t,i,n),this},removePointerListener:function(t,e,i){var n=t["_leaflet_"+e+i];return"touchstart"===e?t.removeEventListener(this.POINTER_DOWN,n,!1):"touchmove"===e?t.removeEventListener(this.POINTER_MOVE,n,!1):"touchend"===e&&(t.removeEventListener(this.POINTER_UP,n,!1),t.removeEventListener(this.POINTER_CANCEL,n,!1)),this},_addPointerStart:function(t,i,n){var s=o.bind(function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t),this._handlePointer(t,i)},this);if(t["_leaflet_touchstart"+n]=s,t.addEventListener(this.POINTER_DOWN,s,!1),!this._pointerDocListener){var r=o.bind(this._globalPointerUp,this);e.documentElement.addEventListener(this.POINTER_DOWN,o.bind(this._globalPointerDown,this),!0),e.documentElement.addEventListener(this.POINTER_MOVE,o.bind(this._globalPointerMove,this),!0),e.documentElement.addEventListener(this.POINTER_UP,r,!0),e.documentElement.addEventListener(this.POINTER_CANCEL,r,!0),this._pointerDocListener=!0}},_globalPointerDown:function(t){this._pointers[t.pointerId]=t,this._pointersCount++},_globalPointerMove:function(t){this._pointers[t.pointerId]&&(this._pointers[t.pointerId]=t)},_globalPointerUp:function(t){delete this._pointers[t.pointerId],this._pointersCount--},_handlePointer:function(t,e){t.touches=[];for(var i in this._pointers)t.touches.push(this._pointers[i]);t.changedTouches=[t],e(t)},_addPointerMove:function(t,e,i){var n=o.bind(function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&this._handlePointer(t,e)},this);t["_leaflet_touchmove"+i]=n,t.addEventListener(this.POINTER_MOVE,n,!1)},_addPointerEnd:function(t,e,i){var n=o.bind(function(t){this._handlePointer(t,e)},this);t["_leaflet_touchend"+i]=n,t.addEventListener(this.POINTER_UP,n,!1),t.addEventListener(this.POINTER_CANCEL,n,!1)}}),o.Map.mergeOptions({touchZoom:o.Browser.touch&&!o.Browser.android23,bounceAtZoomLimits:!0}),o.Map.TouchZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var n=i.mouseEventToContainerPoint(t.touches[0]),s=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(n.add(s)._divideBy(2))),this._startDist=n.distanceTo(s),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i.stop(),o.DomEvent.on(e,"touchmove",this._onTouchMove,this).on(e,"touchend",this._onTouchEnd,this),o.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),s=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(s,this._startZoom),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=e.unproject(e.project(this._pinchStartLatLng).subtract(r))}if(e.options.bounceAtZoomLimits||!(this._zoom<=e.getMinZoom()&&1>s||this._zoom>=e.getMaxZoom()&&s>1)){this._moved||(e._moveStart(!0),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest);var a=o.bind(e._move,e,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=o.Util.requestAnimFrame(a,this,!0),o.DomEvent.preventDefault(t)}}},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);this._zooming=!1,o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var t=this._zoom;t=this._map._limitZoom(t-this._startZoom>0?Math.ceil(t):Math.floor(t)),this._map._animateZoom(this._center,t,!0,!0)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),o.DomEvent.on(e,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY),this._simulateEvent("mousemove",e)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_resetState:function(){this._moved=!1},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(this._resetState(),o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startPoint=this._map.mouseEventToContainerPoint(t),void o.DomEvent.on(e,{contextmenu:o.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this))},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=o.DomUtil.create("div","leaflet-zoom-box",this._container),o.DomUtil.addClass(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new o.Bounds(this._point,this._startPoint),i=e.getSize();o.DomUtil.setPosition(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(o.DomUtil.remove(this._box),o.DomUtil.removeClass(this._container,"leaflet-crosshair")),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,{contextmenu:o.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){setTimeout(o.bind(this._resetState,this),0);var e=new o.LatLngBounds(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),o.DomEvent.on(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),o.DomEvent.off(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e,i=t.keyCode,n=this._map;if(i in this._panKeys){if(n._panAnim&&n._panAnim._inProgress)return;e=this._panKeys[i],t.shiftKey&&(e=o.point(e).multiplyBy(3)),n.panBy(e),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds)}else if(i in this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[i]);else{if(27!==i)return;n.closePopup()}o.DomEvent.stop(t)}}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),o.DomUtil.addClass(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(t){var e=this._marker,i=e._shadow,n=o.DomUtil.getPosition(e._icon),s=e._map.layerPointToLatLng(n);i&&o.DomUtil.setPosition(i,n),e._latlng=s,t.latlng=s,e.fire("move",t).fire("drag",t)},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},remove:function(){return this._map?(o.DomUtil.remove(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,s){var r=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",r,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){o.DomUtil.remove(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){this._disabled||this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._disabled||this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s){var r=o.DomUtil.create("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,o.DomEvent.on(r,"mousedown dblclick",o.DomEvent.stopPropagation).on(r,"click",o.DomEvent.stop).on(r,"click",s,this).on(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),(this._disabled||t._zoom===t.getMinZoom())&&o.DomUtil.addClass(this._zoomOutButton,e),(this._disabled||t._zoom===t.getMaxZoom())&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent&&o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e,i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=1e3>e?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e,i,n,o=3.2808399*t;o>5280?(e=o/5280,i=this._getRoundNum(e),this._updateScale(this._iScale,i+" mi",i/e)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),this._map=t,t.on("zoomend",this._checkDisabledLayers,this),this._container},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update()},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update()},removeLayer:function(t){return t.off("add remove",this._onLayerChange,this),delete this._layers[o.stamp(t)],this._update()},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.DomEvent.disableClickPropagation(e),o.Browser.touch||o.DomEvent.disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,{mouseenter:this._expand,mouseleave:this._collapse},this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){t.on("add remove",this._onLayerChange,this);var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(!this._container)return this;o.DomUtil.empty(this._baseLayersList),o.DomUtil.empty(this._overlaysList);var t,e,i,n,s=0;for(i in this._layers)n=this._layers[i],this._addItem(n),e=e||n.overlay,t=t||!n.overlay,s+=n.overlay?0:1;return this.options.hideSingleBase&&(t=t&&s>1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._layers[o.stamp(t.target)],i=e.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,i){var n='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"'+(i?' checked="checked"':"")+"/>",o=e.createElement("div");return o.innerHTML=n,o.firstChild},_addItem:function(t){var i,n=e.createElement("label"),s=this._map.hasLayer(t.layer);t.overlay?(i=e.createElement("input"),i.type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=s):i=this._createRadioElement("leaflet-base-layers",s),i.layerId=o.stamp(t.layer),o.DomEvent.on(i,"click",this._onInputClick,this);var r=e.createElement("span");r.innerHTML=" "+t.name;var a=e.createElement("div");n.appendChild(a),a.appendChild(i),a.appendChild(r);var h=t.overlay?this._overlaysList:this._baseLayersList;return h.appendChild(n),this._checkDisabledLayers(),n},_onInputClick:function(){var t,e,i,n=this._form.getElementsByTagName("input"),o=[],s=[];this._handlingClick=!0;for(var r=n.length-1;r>=0;r--)t=n[r],e=this._layers[t.layerId].layer,i=this._map.hasLayer(e),t.checked&&!i?o.push(e):!t.checked&&i&&s.push(e);for(r=0;r<s.length;r++)this._map.removeLayer(s[r]);for(r=0;r<o.length;r++)this._map.addLayer(o[r]);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded"),this._form.style.height=null;var t=this._map._size.y-(this._container.offsetTop+50);t<this._form.clientHeight?(o.DomUtil.addClass(this._form,"leaflet-control-layers-scrollbar"),this._form.style.height=t+"px"):o.DomUtil.removeClass(this._form,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers()},_collapse:function(){o.DomUtil.removeClass(this._container,"leaflet-control-layers-expanded")},_checkDisabledLayers:function(){for(var t,e,n=this._form.getElementsByTagName("input"),o=this._map.getZoom(),s=n.length-1;s>=0;s--)t=n[s],e=this._layers[t.layerId].layer,t.disabled=e.options.minZoom!==i&&o<e.options.minZoom||e.options.maxZoom!==i&&o>e.options.maxZoom}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Evented.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=1e3*this._duration;i>e?this._runFrame(this._easeOut(e/i),t):(this._runFrame(1),this._complete())},_runFrame:function(t,e){var i=this._startPos.add(this._offset.multiplyBy(t));e&&i._round(),o.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate,duration:n.duration},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this.fire("moveend");if(e.animate!==!0&&!this.getSize().contains(t))return this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4});var h=o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.mobileOpera;h&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),o.DomEvent.on(this._proxy,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this))}),o.Map.include(h?{_createAnimProxy:function(){var t=this._proxy=o.DomUtil.create("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=o.DomUtil.TRANSFORM,n=t.style[i];o.DomUtil.setTransform(t,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===t.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var e=this.getCenter(),i=this.getZoom(); +o.DomUtil.setTransform(t,this.project(e,i),this.getZoomScale(i,1))},this)},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),s=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate===!0||this.getSize().contains(s)?(o.Util.requestAnimFrame(function(){this._moveStart(!0)._animateZoom(t,e,!0)},this),!0):!1},_animateZoom:function(t,e,i,n){i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},_onZoomTransitionEnd:function(){this._animatingZoom&&(o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom)._moveEnd(!0)},this))}}:{}),o.Map.include({flyTo:function(t,e,n){function s(t){var e=(v*v-g*g+(t?-1:1)*L*L*y*y)/(2*(t?v:g)*L*y);return Math.log(Math.sqrt(e*e+1)-e)}function r(t){return(Math.exp(t)-Math.exp(-t))/2}function a(t){return(Math.exp(t)+Math.exp(-t))/2}function h(t){return r(t)/a(t)}function l(t){return g*(a(x)/a(x+P*t))}function u(t){return g*(a(x)*h(x+P*t)-r(x))/L}function c(t){return 1-Math.pow(1-t,1.5)}function d(){var i=(Date.now()-b)/D,n=c(i)*w;1>=i?(this._flyToFrame=o.Util.requestAnimFrame(d,this),this._move(this.unproject(_.add(m.subtract(_).multiplyBy(u(n)/y)),f),this.getScaleZoom(g/l(n),f),{flyTo:!0})):this._move(t,e)._moveEnd(!0)}if(n=n||{},n.animate===!1||!o.Browser.any3d)return this.setView(t,e,n);this.stop();var _=this.project(this.getCenter()),m=this.project(t),p=this.getSize(),f=this._zoom;t=o.latLng(t),e=e===i?f:e;var g=Math.max(p.x,p.y),v=g*this.getZoomScale(f,e),y=m.distanceTo(_)||1,P=1.42,L=P*P,x=s(0),b=Date.now(),w=(s(1)-x)/P,D=n.duration?1e3*n.duration:1e3*w*.8;return this._moveStart(!0),d.call(this),this},flyToBounds:function(t,e){var i=this._getBoundsCenterZoom(t,e);return this.flyTo(i.center,i.zoom,e)}}),o.Map.include({_defaultLocateOptions:{timeout:1e4,watch:!1},locate:function(t){if(t=this._locateOptions=o.extend({},this._defaultLocateOptions,t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=n.toBounds(t.coords.accuracy),r=this._locateOptions;if(r.setView){var a=this.getBoundsZoom(s);this.setView(n,r.maxZoom?Math.min(a,r.maxZoom):a)}var h={latlng:n,bounds:s,timestamp:t.timestamp};for(var l in t.coords)"number"==typeof t.coords[l]&&(h[l]=t.coords[l]);this.fire("locationfound",h)}})}(window,document); \ No newline at end of file diff --git a/templates/layouts/main.html b/templates/layouts/main.html index fd16631b..6d2493f2 100644 --- a/templates/layouts/main.html +++ b/templates/layouts/main.html @@ -1,6 +1,6 @@ -<!doctype html> +<!doctype html> <head> -<meta charset="utf-8"> +<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>{% block title %}{% endblock %}</title> <!-- meta --> @@ -21,7 +21,7 @@ <!-- favicons --> <link rel="shortcut icon" href="/static/ico/favicon.png"> -<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/static/ico/apple-touch-icon-144-precomposed.png"> +<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/static/ico/favicon.png"> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/static/ico/apple-touch-icon-114-precomposed.png"> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/static/ico/apple-touch-icon-72-precomposed.png"> <link rel="apple-touch-icon-precomposed" href="/static/ico/apple-touch-icon-57-precomposed.png"> @@ -32,7 +32,8 @@ <script src="/static/js/libs/modernizr-2.8.2.min.js"></script> <!--[if lt IE 9]><script src="/static/js/libs/respond-1.4.2.min.js"></script><![endif]--> <!-- /scripts --> - +<style> +</style> </head> <body> @@ -40,7 +41,7 @@ <div id="wrap"> <!-- Fixed navbar --> - <div class="navbar navbar-default navbar-fixed-top"> + <div class="navbar my-navbar navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> @@ -48,28 +49,14 @@ <span class="icon-bar"></span> <span class="icon-bar"></span> </button> - <a class="navbar-brand" href="/">Project name</a> + <a class="navbar-brand" href="#" style="padding: 0px"> + <img src="/static/ico/logo.png" class="img-responsive" style="height: 50px; width: 175px"/> + </a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li {% if request.endpoint == 'home' %} class="active" {% endif %}><a href="{{ url_for('home') }}">Home</a></li> <li {% if request.endpoint == 'about' %} class="active" {% endif %}><a href="{{ url_for('about') }}">About</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a>Action</a></li> - <li><a>Another action</a></li> - <li><a>Something else here</a></li> - <li class="divider"></li> - <li class="dropdown-header">Nav header</li> - <li><a>Separated link</a></li> - <li><a>One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav navbar-nav pull-right"> - <li><a href="{{ url_for('register') }}">Signup</a></li> - <li><a href="{{ url_for('login') }}">Login</a></li> </ul> </div><!--/.nav-collapse --> </div> @@ -95,9 +82,9 @@ </div> - <div id="footer"> + <div id="footer" style="background: #68da7c"> <div class="container"> - <p>Your Company © All Rights Reserved.</p> + <p>CitySense Co. © All Rights Reserved.</p> {% block footer %}{% endblock %} </div> </div> @@ -114,6 +101,9 @@ load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js' }); </script> + + + </body> </html> diff --git a/templates/pages/d3graph.js b/templates/pages/d3graph.js new file mode 100644 index 00000000..202ff743 --- /dev/null +++ b/templates/pages/d3graph.js @@ -0,0 +1,105 @@ + +console.log(data.chart_data); + + var graphData = data.chart_data + // Set the dimensions of the svg + var margin = {top: 30, right: 50, bottom: 30, left: 50}; + var svgWidth = 600; + var svgHeight = 270; + var graphWidth = svgWidth - margin.left - margin.right; + var graphHeight = svgHeight - margin.top - margin.bottom; + // Parse the date / time + var parseDate = d3.time.format("%Y-%m-%d").parse; + // Set the ranges + var x = d3.time.scale().range([0, graphWidth]); + var y = d3.scale.linear().range([graphHeight, 0]); + // Define the axes + var xAxis = d3.svg.axis().scale(x) + .orient("bottom").ticks(5); + var yAxis = d3.svg.axis().scale(y) + .orient("left").ticks(5); + // Define the High line + var highLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.High); }); + var closeLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.Close); }); + var lowLine = d3.svg.line() + .x(function(d) { return x(d.Date); }) + .y(function(d) { return y(d.Low); }); + var area = d3.svg.area() + .x(function(d) { return x(d.Date); }) + .y0(function(d) { return y(d.Low); }) + .y1(function(d) { return y(d.High); }) + // Adds the svg canvas + var svg = d3.select("#graphDiv") + .append("svg") + .attr("width", svgWidth) + .attr("height", svgHeight) + .append("g") + .attr("transform", + "translate(" + margin.left + "," + margin.top + ")") + // define function + function draw(data) { + data.forEach(function(d) { + d.Date = parseDate(d.Date); + d.High = +d.High; + d.Close = +d.Close; + d.Low = +d.Low; + }); + // Scale the range of the data + x.domain(d3.extent(data, function(d) { return d.Date; })); + y.domain([d3.min(data, function(d) { + return Math.min(d.High, d.Close, d.Low) }), + d3.max(data, function(d) { + return Math.max(d.High, d.Close, d.Low) })]); + // Add the area path. + svg.append("path") + .datum(data) + .attr("class", "area") + .attr("d", area) + // Add the 2 valueline paths. + svg.append("path") + .style("stroke", "green") + .style("fill", "none") + .attr("class", "line") + .attr("d", highLine(data)); + svg.append("path") + .style("stroke", "blue") + .style("fill", "none") + .style("stroke-dasharray", ("3, 3")) + .attr("d", closeLine(data)); + svg.append("path") + .style("stroke", "red") + .attr("d", lowLine(data)); + // Add the X Axis + svg.append("g") + .attr("class", "x axis") + .attr("transform", "translate(0," + graphHeight + ")") + .call(xAxis); + // Add the Y Axis + svg.append("g") + .attr("class", "y axis") + .call(yAxis); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].High)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "green") + .text("High"); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].Low)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "red") + .text("Low"); + svg.append("text") + .attr("transform", "translate("+(graphWidth+3)+","+y(graphData[0].Close)+")") + .attr("dy", ".35em") + .attr("text-anchor", "start") + .style("fill", "blue") + .text("Close"); + }; + + draw(graphData); \ No newline at end of file diff --git a/templates/pages/placeholder.home.html b/templates/pages/placeholder.home.html index 45355d68..9ffd78bd 100644 --- a/templates/pages/placeholder.home.html +++ b/templates/pages/placeholder.home.html @@ -1,10 +1,42 @@ {% extends 'layouts/main.html' %} -{% block title %}Home{% endblock %} +{% block title %}Home | CitySense{% endblock %} {% block content %} -<div class="page-header"> - <h1>Sticky footer with fixed navbar</h1> +<link type="text/css" rel="stylesheet" href="/static/css/d3.css" /> +<link type="text/css" rel="stylesheet" href="/static/js/libs/leaflet/leaflet.css" /> + +<script type="text/javascript" src="/static/js/libs/d3.min.js"></script> +<script src="/static/js/libs/leaflet/leaflet.js"></script> +<script type="text/javascript" src="/static/js/libs/heatmap.js-2.0.5/build/heatmap.min.js"></script> +<script type="text/javascript" src="/static/js/libs/heatmap.js-2.0.5/plugins/leaflet-heatmap/leaflet-heatmap.js"></script> + + +<script> + //line graph + var graphData = {{ data.chart_data | safe }} +</script> + +<script> + //heatmap + var testData = { + max: 50, + data: {{ data.point_data | safe }} + } +</script> + + + +<div class="container-fluid"> + <div class="row"> + <div class="col-sm-6"> + <div id="map" style="width:100%; height:600px; display: inline-block"></div> + <script type="text/javascript" src="/static/js/leafmap.js"></script> + </div> + <div class="col-sm-6"> + <div class="square" style="width: 100%; height: 300px; background-color: green"></div> + <div class="square" style="width: 100%; height: 300px; background-color: blue"></div> + </div> + </div> </div> -<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p> {% endblock %}